我需要在弹出视图的推送视图(嵌入在导航控制器中)中调用主视图控制器('showDetails:')上的委托方法。这完全来自故事板设置。
层次结构是:主视图 - > Popover(嵌入在导航控制器中的菜单tableview) - > Popover辅助视图(推送到弹出式导航控制器)
我知道如何使用prepareForSegue在popover上设置委托,但不在内部视图上设置委托。 如何从弹出窗口的内部(推送)视图调用主视图上的委托方法?
以下是我在弹出窗口主视图上设置委托的方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"segueSearchResults"]) {
//Dismiss User Popover
[self dismissUserPopover];
SearchResultsViewController *vc = segue.destinationViewController;
vc.searchDelegate = self;
self.searchPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
self.searchPopover.delegate = self;
}
}
答案 0 :(得分:0)
当你需要在VC层次结构中相距很远的两个视图控制器之间进行通信时,尝试从另一个视图控制器中引用一个,这样你就可以直接调用它上面的方法不能很好地工作 - 有几个级别的间接介于两者之间,如果稍后更改VC层次结构,则非常脆弱。
查看通知(NSNotificationCenter);您可以为另一个人提供一个VC“广播”信息,以响应,无论他们在您的应用中的位置。
答案 1 :(得分:0)
相反,委托我更喜欢你的情况下的“NSNotificationCenter”
在您的ViewController中添加一个观察者,以便在uiview中执行某些操作
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveActionNotification:)
name:@"someActionNotification"
object:nil];
从您在PopOverController中推送的视图发布通知 将调用ViewController中的Post Notification和方法
[[NSNotificationCenter defaultCenter] postNotificationName:@"someActionNotification" object:self];
最后别忘了删除Observer。
[[NSNotificationCenter defaultCenter] removeObserver:@"someActionNotification"];