0

私は UIPickerView を持っています。そのデリゲートで、行のビューをカスタマイズしようとしています。3.1 SDK を使用しています。

したがって、デリゲートには次のものがあります。

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

Apple ドキュメントから: 以前に使用したビュー (ビュー パラメーター) が適切な場合は、それを返します。別のビューを返すと、以前に使用されていたビューが解放されます。ピッカー ビューは、返されたビューを行の四角形の中央に配置します。

これを実行すると、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 に答える