【问题标题】:iOS - Call delegate method on main view from popover inner (pushed) view?iOS - 从弹出框内部(推送)视图调用主视图上的委托方法?
【发布时间】:2013-03-23 19:01:54
【问题描述】:

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

    }
}

【问题讨论】:

  • 我不确定您是否正确使用了子视图一词。最后一个控制器是弹出框控制器的子视图控制器,还是推送到最后一个控制器?
  • 对不起,是的,这是一个“推”的观点,而不是孩子。我会纠正主要问题。

标签: ios delegates nsnotificationcenter popover childviews


【解决方案1】:

在你的情况下,我更喜欢“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"];

【讨论】:

  • 是的,我为很多应用程序使用通知,我只是希望有一种方法可以在代理中使用它。我觉得代表是更“干净”的解决方案,但我想我将不得不使用通知。
  • 通知和委托不是一回事。通知适合单向沟通,委托适合双向沟通。如果您还记得这个关键区别,那么您就会知道为什么 Apple 在大多数情况下使用委托模式和通知模式(键盘通知)。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-25
    • 2013-06-04
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多