2013-03-23 70 views
0

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

的层次是:主视图 - >酥料饼(菜单的tableview嵌入在导航控制器) - >酥料饼的次级视图(压入酥料饼的导航控制器)

我知道如何安装使用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

我不确定您是否正确使用术语子视图。这个最后一个控制器是popover控制器的子视图控制器,还是你推动到最后一个控制器? – rdelmar 2013-03-24 02:43:14

+0

对不起,是的,这是一个“推”的看法,而不是孩子。我会纠正主要问题。 – JimmyJammed 2013-03-24 04:47:17

回答

0

而是委托我喜欢“NSNotificationCenter”你的情况

中的UIView添加观察员到你的ViewController一些行动从在PopOverController 后通知和方法,你推查看

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

邮政通知您的Viewcontroller将被称为

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

最后不要忘记删除Observer。

[[NSNotificationCenter defaultCenter] removeObserver:@"someActionNotification"]; 
+1

是的,我使用很多应用程序的通知,我只是希望有一种方法可以在代表中使用它。我觉得代表们有很多“更清洁”的解决方案,但我想我将不得不使用通知。 – JimmyJammed 2013-03-26 20:50:43

+0

通知和代表不是同一件事。通知适合单向通信,授权适合双向通信。如果你记得这个关键差异,那么你就会知道为什么Apple在大多数情况下和通知模式(键盘通知)中使用委托模式。 – 2013-03-27 06:58:55

0

当你需要两个视图控制器这是相距甚远的VC层级之间的沟通,试图引用从另一个这样你可以直接调用它的方法不能很好地工作 - 它们之间存在几个间接级别,如果你以后改变你的VC层次结构,它是非常脆弱的。

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

相关问题