2つのビューコントローラがあります。イムは、私は私の第2のビューコントローラCEPeoplePickerNavigationController
2番目のビューコントローラからコールバックを受信できません
@class CEPeoplePickerNavigationController;
@protocol CEPeoplePickerNavigationControllerDelegate <NSObject>
- (void)previousViewController:(CEPeoplePickerNavigationController *)controller itemToSend:(NSString *)item;
@end
@interface CEPeoplePickerNavigationController : UIViewController <UITableViewDelegate,UITableViewDataSource>{
}
@property (nonatomic, retain) id < CEPeoplePickerNavigationControllerDelegate> peoplePickerDelegate;
@end
ユーザーが実行ボタンをクリックで次のコードは、次のコードをexectiedされている
以前のViewControllerにデータを渡すためにしようと
- (void)doneAction:(id)sender
{
[self.peoplePickerDelegate previousViewController:self itemToSend:@"From Previous VC"];
[self dismissViewControllerAnimated:YES completion:nil];
}
私の最初のビューコントローラーでは、ヘッダーファイルに次のインターフェイスがあり、データを受け取る必要がある最初のビューコントローラーでpreviousViewControllerメソッドを実装しました。
@interface CallViewViewController : UIViewController<CEPeoplePickerNavigationControllerDelegate>
@end
最初のビューコントローラから2番目のビューコントローラに移動すると、次のコードを使用します。
CEPeoplePickerNavigationController *nextVc = [[CEPeoplePickerNavigationController alloc] init];
nextVc.peoplePickerDelegate = self;
[self presentViewController:nextVc animated:YES completion:nil];
しかし、ユーザーが2番目のビューコントローラーから完了ボタンをクリックしたとき、私の最初のビューコントローラーでコールバックは受信されません。なぜそうなのか?私は、次のようなインタフェースを実装している
、
- (void)previousViewController:(CEPeoplePickerNavigationController *)controller itemToSend:(NSString *)item
{
NSLog(@"from CEPeoplePickerNavigationController %@",item);
}
UPDATE:コードに続いて
は
if ([[CallViewViewController new] respondsToSelector:@selector(previousViewController:item:)]) {
[self.viewCrtrlDelegate previousViewController:self item:@"Here I am"];
[self dismissViewControllerAnimated:YES completion:nil];
}
else{
NSLog(@"Your delegate was properly set");
}
に動作します。しかし、私は道に従うことによって、それをしようとした場合、それが動作しません
if ([[self.viewCrtrlDelegate respondsToSelector:@selector(previousViewController:item:)]) {
[self.viewCrtrlDelegate previousViewController:self item:@"Here I am"];
[self dismissViewControllerAnimated:YES completion:nil];
}
else{
NSLog(@"Your delegate was properly set");
}
これは、ビューコントローラをインスタンス化する方法です。
CEPeoplePickerNavigationController *nextVc = [[CEPeoplePickerNavigationController alloc] init];
nextVc.viewCrtrlDelegate = self;
[self presentViewController:nextVc animated:YES completion:nil];
このメソッドを実行するかどうかを指定します。 –
完了ボタンのボタンアクションを表示します。 –
私は最初のビューコントローラで 'CEPeoplePickerNavigationControllerDelegate'を実装しましたが、 –