从导航控制器内的表视图控制器中的按钮展开

Posted

技术标签:

【中文标题】从导航控制器内的表视图控制器中的按钮展开【英文标题】:Unwind from a button in a table view controller inside a nav controller 【发布时间】:2013-03-27 04:05:53 【问题描述】:

我在情节提要中有以下控制器:

导航控制器由左侧主视图控制器中的按钮连接。它出现在弹出窗口中。当用户单击右侧表格视图控制器顶部的“退出”按钮时,我需要返回主视图控制器,调用执行退出的方法,然后显示身份验证视图控制器(如果用户未登录,则无法使用该应用程序)。我尝试过的所有方法都失败了。

    我几乎可以通过展开 segue 来做到这一点,但如果在主视图的展开方法中我启动身份验证视图控制器,我会收到“在演示或关闭正在进行时尝试从视图控制器关闭“ 警告。设置计时器以等待任意时间以完成解雇似乎是一种黑客行为。 (我希望有一个“你的 segue 刚刚完成”回调。)

    我不能通过在 prepareForSegue 方法中将主视图控制器设置为设置控制器的委托并在单击按钮时在其上调用委托方法来做到这一点,这将是常态,因为segue 中的destinationViewController 不是我的设置控制器,而是包含它的导航控制器。

有一些明显的方法可以做到这一点,对吧?也许通过将按钮附加到设置视图控制器中的方法,该方法会自行关闭,然后在完成块中触发 NSNotification?这看起来仍然很老套。

【问题讨论】:

【参考方案1】:

您可以在 prepareForSegue 方法中使主视图控制器成为设置控制器的委托,方法是:

 SettingsViewcontroller *settings =  [(UINavigationController *)segue.destinationViewController topViewController];
settings.delegate = self;

我认为您可以在设置控制器的 viewDidDisappear 方法中调用委托方法。

【讨论】:

无论出于何种原因,我似乎都无法解除弹出框,但您的解决方案似乎显然是正确的,所以我接受了它。谢谢。

以上是关于从导航控制器内的表视图控制器中的按钮展开的主要内容,如果未能解决你的问题,请参考以下文章

无法从展开的 segue 动作中弹出

从 UITableviewCell 上的按钮导航到其他视图控制器的代码是啥?

自定义 UIView XIB 内的 iOS 导航返回按钮(无导航控制器)

从 xib 内的按钮单击调用 IBAction 时出错

如何展开到导航堆栈上的第一个视图控制器

如何将参数传递给导航控制器内的弹出视图控制器