1

まず第一に、私は Objective-C の「学習」を始めたばかりだと言いたいです。私が大きな間違いをした場合は申し訳ありません

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)componentビュー2からビュー1に委任しようとしています...

1.h を表示:

@interface ViewController : UIViewController <PopOverViewControllerDelegate>

ビュー 1.m:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
  inComponent:(NSInteger)component{ //stuff here}

ビュー 2.h:

@protocol PopOverViewControllerDelegate <NSObject, UIPickerViewDelegate>
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
  inComponent:(NSInteger)component;
@end

@interface PopOverViewController : UIViewController <UIPickerViewDataSource>

ビュー 2.m:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
  inComponent:(NSInteger)component{

[self.delegate pickerView:categoryPicker didSelectRow:row inComponent:component];

}

それは動作しません...

4

2 に答える 2

1
  1. ビューが別のビューのデリゲートになるのは少し奇妙です。ビューは実際にはデータについて多くのことを知っているべきではありません。通常、デリゲートに必要な種類の決定を行うのはコントローラーです。

  2. 1 つのデリゲート (View1) がピッカーのデリゲート メッセージを別のデリゲート (View2) に渡す代わりに、View2 をピッカーのデリゲートにしないのはなぜでしょうか? 必要以上に物事を複雑にしているようです。

  3. 「動かない」よりも詳しく教えてください。それがうまくいったなら、そもそもあなたは尋ねないでしょう。うまくいかない理由を教えてくださいView2 のメソッドが呼び出されることはありますか? はいの場合、何が問題ですか? いいえの場合、なぜですか? View2 を呼び出さない原因となる View1 ではどうなりますか?

于 2012-05-04T18:12:16.330 に答える
0

delegateを別の に渡すには、デリゲートを別classの に設定するだけです。クラス 2で、処理するメソッドを定義し、.h of 2 で確認します。次に、1でこの行を書くだけです-UIPickerViewclassdelegateclassUIPicklerView delegateclass

[pickerView setDelegate:class2];

上記の行pickerViewの は の参照でUIPickerViewあり、class2は へのインスタンスへの参照class2です。

@Calebの回答もご覧ください。私は彼に完全に同意します。上記のことを行うことで、物事がより複雑になります。

于 2012-05-04T18:13:59.967 に答える