2 选择器不显示值
2 picker not displaying values
我目前有 2 个选择器设置到我的 viewController.h
@interface viewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
@property (weak, nonatomic) IBOutlet UIPickerView *lPicker;
@property (weak, nonatomic) IBOutlet UIPickerView *rPicker;
@end
我的 lPicker.tag = 0,并且 rPicker.tag = 1
在我的 viewController.m
实现文件中
我定义了以下方法...
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;
}
现在我遇到了以下问题,我想在 lPicker 上显示 data1 的值,在右选择器上我想显示 data2 的值。
我试过创建方法 -(id)pickerView 但不能同时 return NSString * 和 UIImageView。
如果我实现类似...的东西就不起作用
-(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;
}
如目前所写,您对重用视图做出了错误的假设。您还需要更改确定正在使用哪个选择器的方式。并修复方法的 return 值。
试试这个:
- (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;
}
}
我目前有 2 个选择器设置到我的 viewController.h
@interface viewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
@property (weak, nonatomic) IBOutlet UIPickerView *lPicker;
@property (weak, nonatomic) IBOutlet UIPickerView *rPicker;
@end
我的 lPicker.tag = 0,并且 rPicker.tag = 1
在我的 viewController.m
实现文件中我定义了以下方法...
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;
}
现在我遇到了以下问题,我想在 lPicker 上显示 data1 的值,在右选择器上我想显示 data2 的值。
我试过创建方法 -(id)pickerView 但不能同时 return NSString * 和 UIImageView。
如果我实现类似...的东西就不起作用
-(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;
}
如目前所写,您对重用视图做出了错误的假设。您还需要更改确定正在使用哪个选择器的方式。并修复方法的 return 值。
试试这个:
- (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;
}
}