在viewDidLoad方法

时间:2017-03-15 20:19:40

标签: objective-c uiimageview uipickerview

我正在使用iOS应用,需要显示包含两个组件的PickerView,一个包含字符串,另一个包含UIImageViews。在视图控制器的类扩展中,我创建了一个名为" suites"保存UIImages,并在viewDidLoad方法中填充数组:

viewDidLoad method

我还将视图控制器指定为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数组:

simulator

更新: 块内     if(component == suiteComponent) 永远不会到达。我有这个数据源方法:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

所以如果我的理解是正确的,UIPickerView最终应该调用它的委托来呈现第二个组件。但是,当我调试它时,委托方法的行参数在所有调用中保持在0和4之间,并且组件变量保持为0.

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

这是启动自定义对象的错误方法。

你应该这样做:

<div ng-model="questionData" id="editorContainer" style='width:100%; height:500px;'>Responsible!</div>

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

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