0

我需要从弹出视图的推送视图(嵌入在导航控制器中)调用我的主视图控制器('showDetails:')上的委托方法。这一切都来自故事板设置。

层次结构是:主视图->弹出框(导航控制器中嵌入的菜单表视图)->弹出框辅助视图(推送到弹出框导航控制器上)

我知道如何使用 prepareForSegue 在弹出框上设置委托,但不是在内部视图上。如何从弹出框的内部(推送)视图调用主视图上的委托方法?

这是我在弹出主视图上设置委托的方法:

- (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;

    }
}
4

2 回答 2

0

Instead Delegate i prefer "NSNotificationCenter" in your case

Add an observer to your ViewController for some action in uiview

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(receiveActionNotification:)
                                         name:@"someActionNotification"
                                       object:nil];

Post Notification from your pushed View in PopOverController Post Notification and method in your Viewcontroller will be called

[[NSNotificationCenter defaultCenter] postNotificationName:@"someActionNotification" object:self];

At the end Dont forget to remove Observer.

[[NSNotificationCenter defaultCenter] removeObserver:@"someActionNotification"];
于 2013-03-24T06:35:52.037 回答
0

当您需要在 VC 层次结构中相距很远的两个视图控制器之间进行通信时,尝试从另一个中引用一个以便您可以直接调用其上的方法并不能很好地工作——中间有几个级别的间接,并且如果您稍后更改 VC 层次结构,它会非常脆弱。

改为查看通知(NSNotificationCenter);无论他们在您的应用程序中的什么位置,您都可以让另一个 VC“广播”信息来响应。

于 2013-03-24T05:06:18.257 回答