iOS - 从popover内部(推送)视图调用主视图上的委托方法?

时间:2013-03-23 19:01:55

标签: ios delegates nsnotificationcenter popover childviews

我需要在弹出视图的推送视图(嵌入在导航控制器中)中调用主视图控制器('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;

    }
}

2 个答案:

答案 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"];