iOS 表达式结果在 viewDidLoad 方法中未使用



我正在开发一个iOS应用程序,需要显示一个包含两个组件的PickerView,一个包含字符串,一个包含UIImageViews。在视图控制器的类扩展中,我创建了一个名为"suites"的NSArray来保存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 之间。

我将不胜感激任何帮助,谢谢!

这是启动自定义对象的不正确方法。

你应该这样做:

self.suites = [[Suites alloc] initWithObjects:@[heart,club,spade,diamond]];

然后,您可以正确使用self.suites。注意 我假设您的自定义对象类名称是"套件"。您需要将该名称更改为自定义类名的任何名称。我还假设该函数接受 NSArray,因此我创建了文字 ObjC 数组 @[..]。

传递的参数也很可疑。无需在参数传递中强制转换对象类型。您需要检查自定义类的 initWithObjects: 声明。它是声明给输入数组还是 UIImage?

最新更新