首先明确解决这个问题的关键函数
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
思路: 可以在- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view函数内,先创建一个新的UIview *myView 然后将UIimageView和UILabel将入到这个myView,然后在返回这个myView;
注意点:
UIImageView *imageView1 = [[UIImageView alloc]initWithImage:image1];
UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 0, 135, 35)];
UIImageView,UILabel 必须在- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view函数内,不能在- (void)viewDidLoad内申明这两个视图,因为那样的的话这两个视图的所有权在俯视图内,不属于新创建的UIview *myView!
完整代码
#import "YcwViewController.h"
@interface YcwViewController ()
{
NSMutableArray *mArray_images ;
NSMutableArray *mArray_labels;
NSTimer *myTimer;
NSInteger index;
}
@end
@implementation YcwViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.myPickerView.dataSource = self;
self.myPickerView.delegate =self;
self.view.backgroundColor = [UIColor whiteColor];
mArray_images = [[NSMutableArray alloc]initWithObjects:[UIImage imageNamed:@"111.jpg"],[UIImage imageNamed:@"222.png"],[UIImage imageNamed:@"333.png"],[UIImage imageNamed:@"444.png"],[UIImage imageNamed:@"555.png"],[UIImage imageNamed:@"666.png"], nil];
mArray_labels = [[NSMutableArray alloc]initWithObjects:@"1110311201",@"1110311202",@"1110311203",@"1110311204",@"1110311205",@"1110311206", nil];
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
UIView *myView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 35)];
UIImage *image1 = [mArray_images objectAtIndex:row%6];
UIImageView *imageView1 = [[UIImageView alloc]initWithImage:image1];
imageView1.frame = CGRectMake(0, 0, 35, 35);
UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 0, 135, 35)];
myLabel.text = [mArray_labels objectAtIndex:row%6];
[myView addSubview:imageView1];
[myView addSubview:myLabel];
return myView;
}