【发布时间】:2017-02-13 05:25:45
【问题描述】:
我有两个视图控制器。我试图将数据传递给前一个视图控制器
我的第二个视图控制器中有以下代码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
当用户点击完成按钮时,将执行以下代码
- (void)doneAction:(id)sender
{
[self.peoplePickerDelegate previousViewController:self itemToSend:@"From Previous VC"];
[self dismissViewControllerAnimated:YES completion:nil];
}
在我的第一个视图控制器中,我在头文件中有以下接口,当然我在我的第一个视图控制器中实现了 previousViewController 方法,其中必须接收数据
@interface CallViewViewController : UIViewController<CEPeoplePickerNavigationControllerDelegate>
@end
当我从第一个视图控制器移动到第二个视图控制器时,我使用以下代码。
CEPeoplePickerNavigationController *nextVc = [[CEPeoplePickerNavigationController alloc] init];
nextVc.peoplePickerDelegate = self;
[self presentViewController:nextVc animated:YES completion:nil];
但是当用户从第二个视图控制器单击完成按钮时,我在我的第一个视图控制器中没有收到任何回调。为什么会这样?
我已经实现了如下接口,
- (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];
【问题讨论】:
-
方法执行与否
-
显示完成按钮的按钮动作。
-
我已经附上了完成的按钮操作
-
虽然我在第一个视图控制器中实现了
CEPeoplePickerNavigationControllerDelegate,但第一个视图控制器中的回调方法没有被执行或调用 -
有什么想法吗?.....
标签: ios objective-c callback delegates