2012-05-04 12 views
1

まず、「学習」の目的を始めていると思います。申し訳ありませんが、私はビュー1にビュー2から-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)componentを委任しようとしている...別のビューに代理人PickerViewの代理人

表示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]; 

} 

...

答えて

0
  1. それは別のビューのデリゲートするビューのために少し奇妙です。ビューは実際にはデータをあまり知ってはいけません。コントローラは通常、デリゲートに必要な決定を行います。

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

  3. 問題については、「動作しません」より詳しく教えてください。それがうまくいけば、最初に尋ねることはありません。どのようにそれは動作しませんを教えてください。 View2のメソッドが呼び出されますか?はいの場合、問題は何ですか?いいえ、なぜでしょうか? View2を呼び出さないようにするView1ではどうなりますか?あなたは自分の別のclassUIPickerViewのデリゲートを設定する必要が異なるclassdelegateを渡すために

+0

実際、View 1とView 2はどちらもコントローラです。ビュー2では、PickerViewは1つしかありません。 View 2のPickerViewのどの行が選択されているかを知る必要があります。 – Benjamin

+0

ビュー2では、 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger) [self.delegate pickerView:categoryPicker didSelectRow:row inComponent:component]; } 'が呼び出されます。ビュー1で何も呼び出されていません。 – Benjamin

0

。あなたのクラス2で 2の扱いたい.hのdelegateメソッドを定義してくださいUIPicklerViewdelegateを確認してください。そして、1 classであなただけのこの行を記述する必要がある -

[pickerView setDelegate:class2]; 

を上記の行pickerViewUIPickerViewclass2の参照がclass2へのインスタンスへの参照です。

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

+0

はい、私は全く同意します..しかし、Objective-Cでこの作業を行う完璧な方法を見つけるのに十分な経験はありません – Benjamin