我正在使用iOS应用,需要显示包含两个组件的PickerView,一个包含字符串,另一个包含UIImageViews。在视图控制器的类扩展中,我创建了一个名为" suites"保存UIImages,并在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;
}
}
在模拟器中,包含UILabels的拾取器组件渲染得很好。包含UIImageViews的组件不会显示,我猜这是因为没有使用UIImages数组:
更新: 块内 if(component == suiteComponent) 永远不会到达。我有这个数据源方法:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
所以如果我的理解是正确的,UIPickerView最终应该调用它的委托来呈现第二个组件。但是,当我调试它时,委托方法的行参数在所有调用中保持在0和4之间,并且组件变量保持为0.
感谢您的帮助,谢谢!
答案 0 :(得分:0)
这是启动自定义对象的错误方法。
你应该这样做:
<div ng-model="questionData" id="editorContainer" style='width:100%; height:500px;'>Responsible!</div>
然后你可以正确使用self.suites。注意我假设你的自定义对象类名是&#34; Suites&#34;。您需要将该名称更改为您的自定义类名称。我还假设函数接受NSArray,因此我创建了文字ObjC数组@ [..]。
参数传递也是可疑的。您不需要在参数传递中强制转换对象类型。您需要检查自定义类的initWithObjects:声明。它被声明为输入数组还是UIImage?