0

我有一个 UIPickerView,在它的委托中,我正在尝试为一行自定义视图。我正在使用 3.1 SDK。

所以在代表中我有:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
//    view.backgroundColor = [UIColor redColor];
    return view;
}

来自苹果文档:如果先前使用的视图(视图参数)足够,则返回它。如果您返回不同的视图,则会释放先前使用的视图。选择器视图将返回的视图居中放置在行的矩形中。

当我运行它时,我的 UIPickerView 控件中没有任何项目,并且在片刻之后崩溃。当我删除这个特定方法(对于委托是可选的)时,我可以看到我通过 titleForRow 方法设置的标签,并且它不会再崩溃。

我对可可(和可可触摸)还很陌生,我不确定 view.backgroundColor 是否会起作用,但即使返回未修改的旧视图(对于大多数行我必须这样做)也会使我的应用程序崩溃。

难道我做错了什么?

4

1 回答 1

2

是的,您实现了 或 –pickerView:titleForRow:forComponent:–pickerView:viewForRow:forComponent:reusingView:但不能同时实现。发生的事情是它没有打电话给你–pickerView:titleForRow:forComponent:,因为它正在使用你的–pickerView:viewForRow:forComponent:reusingView:. 您正在返回reusingView:参数,但这是nil第一次,因为该行没有“以前使用的视图”。

于 2009-10-07T19:50:50.157 回答