无法接收来自第二个视图控制器的回叫
我有两个视图控制器。 我试图将数据传递给以前的视图控制器
我在我的第二个视图控制器CEPeoplePickerNavigationController
下面的代码
@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
当用户点击完成button时,下面的代码将被执行
- (void)doneAction:(id)sender { [self.peoplePickerDelegate previousViewController:self itemToSend:@"From Previous VC"]; [self dismissViewControllerAnimated:YES completion:nil]; }
在我的第一个视图控制器中,我在头文件中有以下接口,并且我在我的第一个视图控制器中实现了先前的视图控制器方法,其中必须接收数据
@interface CallViewViewController : UIViewController<CEPeoplePickerNavigationControllerDelegate> @end
当我从第一个视图控制器移动到第二个视图控制器时,使用下面的代码。
CEPeoplePickerNavigationController *nextVc = [[CEPeoplePickerNavigationController alloc] init]; nextVc.peoplePickerDelegate = self; [self presentViewController:nextVc animated:YES completion:nil];
但是,当用户从第二个视图控制器单击完成button,我没有收到我的第一个视图控制器的任何callback。 为什么这样?
我已经实现了如下界面,
- (void)previousViewController:(CEPeoplePickerNavigationController *)controller itemToSend:(NSString *)item { NSLog(@"from CEPeoplePickerNavigationController %@",item); }
更新:
以下代码作品
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];
你的代码似乎是绝对正确的,但要解决所有的可能性。 你可以检查你做的button动作是否有一个检查,以确定在该类中委托方法是否可用?
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"); }