【发布时间】:2017-03-15 20:19:40
【问题描述】:
我正在开发一个 iOS 应用程序,需要显示一个包含两个组件的 PickerView,一个带有字符串,一个带有 UIImageViews。在视图控制器的类扩展中,我创建了一个名为“suites”的 NSArray 来保存 UIImage,并在 viewDidLoad 方法中填充数组:
我还将视图控制器指定为 PickerView 的委托和数据源。我必须全局变量来识别 PickerView 的两个组件:
#define numberComponent 0
#define suiteComponent 1
并实现了以下委托方法:
- (UIView *)pickerView:(UIPickerView *)pickerView
viewForRow:(NSInteger)row
forComponent:(NSInteger)component
reusingView:(nullable UIView *)view
{
if (component == suiteComponent){
UIImageView *imageView = (UIImageView *) view;
if(!imageView){
imageView = [[UIImageView alloc] initWithImage: self.suites[row]];
}
imageView.image = self.suites[row];
return imageView;
}
else{
UILabel *label = (UILabel *) view;
if(!label){
label = [[UILabel alloc] init];
}
label.text = self.numbers[row];
return label;
}
}
在模拟器中,包含 UILabel 的选择器组件渲染得很好。包含 UIImageViews 的组件不会显示出来,我猜这是因为 UIImages 数组没有被使用:
更新: 里面的块 如果(组件 == 套件组件) 永远达不到。我有这个数据源方法:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
所以如果我的理解是正确的,UIPickerView 最终应该调用它的委托来渲染第二个组件。但是,当我调试它时,委托方法的行参数在所有调用中都保持在 0 到 4 之间,并且组件变量保持在 0。
感谢您的帮助,谢谢!
【问题讨论】:
-
这不是正确的委托方法。 titleForRow 返回 NSSTring。你需要使用 viewForRow!
-
每个问题只能发布一个问题。
标签: objective-c uiimageview uipickerview