我在viewDidLoad中的第一个视图具有以下代码
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Dialpad" bundle:nil];
self.vc = [sb instantiateViewControllerWithIdentifier:@"DialpadBoard"];
self.vc.delegate = self;
头文件包含视图控制器的定义
@property (nonatomic, retain) DialpadTableViewController *vc;
捕获事件后,视图会加载新的模态视图
- (void)handleEvent:(UIGestureRecognizer*)recognizer {
[self presentViewController:self.vc animated:YES completion:NULL];
}
该视图还包含关闭模态视图的方法:
- (void) dialpadControllerDidCancel:(SearchDialpadTableViewController *)controller {
[self dismissViewControllerAnimated:YES completion:nil];
}
永远不会调用最后一个方法。
问题是加载时的模态视图有nil self.delegate。新的模态视图从故事板加载,如下所示。为什么代表是零?因为视图在另一个故事板中,所以我不知道如何
答案 0 :(得分:0)
SearchDialpadTableViewController
是否定义了委托协议,是否具有特定于该协议的属性?
该文件的标题应如下所示:
@protocol ViewControllerDelegateProtocol <NSObject>
- (void)dialpadControllerDidCancel:(SearchDialpadTableViewController *)controller;
@end
@interface ViewController : UIViewController
@property (weak, nonatomic) id<ViewControllerDelegateProtocol> searchPadDelegate;
@end
然后当用户点击Done
时,我正在假设您正在尝试做什么(当发生这种情况时发送委托消息)。你会写类似
- (IBAction)donePressed:(id)sender
{
if ([self.searchPadDelegate respondsToSelector:@selector(dialpadControllerDidCancel)]) {
[self.searchPadDelegate dialpadControllerDidCancel:self];
}
}
答案 1 :(得分:0)
你可以试试这个
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Dialpad" bundle:nil];
UINavigationController *nav= [sb instantiateViewControllerWithIdentifier:@"DialpadBoard"];
((SearchDialpadTableViewController *)[nav viewControllers][0]).delegate = self;
[self presentViewController:nav animated:YES completion:NULL];
由于我们有导航,因此请使用第一个控制器并分配代理
技巧;)
((SearchDialpadTableViewController *)[nav viewControllers][0]).delegate = self;
答案 2 :(得分:0)
你必须确定,self.vc是一个你期望的课程。它也可以是NavigationController