I currently have 2 pickers set to my viewController.h
@interface viewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
@property (weak, nonatomic) IBOutlet UIPickerView *lPicker;
@property (weak, nonatomic) IBOutlet UIPickerView *rPicker;
@end
My lPicker.tag = 0, and rPicker.tag = 1
In my implementation file for viewController.m
I define the following methods...
NSArray *data1 = {@"one", @"two", @"three" };
NSArray *data2 = [NSArray arrayWithObjects: [UIImage imageNamed:@"img1.png"],[UIImage imageNamed:@"img2.png"], nil];
-(NSInteger) numberOfComponentsInPickerView:(UIPickerView*)pickerView {
return 1; //both contain only 1 column
}
-(NSInteger) pickerView:*UIPickerView *) pickerView numberOfRowsInComponent:(NSInteger)component {
if(pickerView.tag == 0) return data1.count; if(pickerView.tag == 1) return data2.count;
}
Now i'm having trouble with the following, on the lPicker I want to display the values from data1, and on the right picker I want to display values of data2.
I've tried creating the method -(id)pickerView but that can't return NSString * and UIImageView at the same time.
Doesn't work if I implement something like...
-(id) pickerView:(UIPickerView *) pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *) view {
if(component == 0) {
UILabel *label = [UILabel alloc];
label.text = [data objectAtIndex:row];
[view addSubview:label];
return view;
}
if(component == 1) {
UIImageView *image = [[UIImageView alloc] initWithImage: [data2 objectAtIndex:row]];
[view addSubview: image];
return view;
}
return view;
}
As written at the moment, you are making bad assumptions about the reuse view. You also need to change how you determine which picker is being used. And fix the return value of the method.
Try this:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
if (pickerView.tag == 0) {
UILabel *label = (UILabel *)view;
if (!label) {
[[UILabel alloc] init];
}
label.text = data1[row];
[label sizeToFit];
return label;
} else {
UIImageView *image = (UIImageView *)view;
if (!image) {
image = [[UIImageView alloc] init];
}
image.image = data2[row];
[image sizeToFit];
return image;
}
}