UIKit - 导航控制器确实导航回来时的操作
Posted
技术标签:
【中文标题】UIKit - 导航控制器确实导航回来时的操作【英文标题】:UIKit - action when navigation controller did navigate back 【发布时间】:2016-03-14 15:12:38 【问题描述】:这应该是绝对微不足道的,但我找不到任何东西:
我有一个带有导航控制器的简单故事板,我从一个名为“Bob”的视图控制器中推送一个视图控制器,我们称之为“Jane”。
所以当 Jane 在点击“返回”按钮后被解雇时,Bob 想做一些事情,如下所示:
- (IBAction) janeWasDismissed:(UIViewController *)jane
// bob wants to ask what Jane did.
这是最简单的事情吧?但我想不通,肯定 Unwind Segues 不是正确的方法吗? 在Interface Builder中必须有一个简单的单击和拖动操作,或者在推送视图控制器弹出时调用的UIViewController上的方法?
谢谢!
【问题讨论】:
【参考方案1】:实际上,这根本不是微不足道的。如果 Bob 需要 Jane 的信息,您需要安排 Jane 将该信息发送回 Bob。例如,在 Jane 的 viewWillDisappear:
中,她可以获得对 Bob 的引用(通过他们共享的导航控制器)并调用 Bob 中的某个方法。
您可能会反对(相当合理地)这意味着 Jane 了解 Bob 的班级。 那个的通常解决方案更加重要:Bob 在召唤 Jane 时,将自己作为 Jane 定义的协议的委托人提供给 Jane。因此,Jane 只需要知道 Bob 的一种方法——不是他的实际类,而是她自己在协议中指定的方法。
【讨论】:
嗯,有趣!我有点认为它应该是相反的:当 Bob 调用 Jane 时,Bob 已经认识 Jane。为什么简要提到鲍勃? 通常的架构是,Bob 在召唤 Jane 时,将自己作为 Jane 定义的协议作为委托提供给 Jane。因此,Jane 只需要知道 Bob 的一种方法——不是他的实际类,而是她自己在协议中指定的方法。 好的,谢谢 - 如果这是一个人所做的事情,我会这样做。看起来仍然很奇怪,因为模态控制器(警报控制器等)以相反的方式进行操作。另一方面,如果推送的 VC 需要从父 VC 中提取数据,我看到了这个模型的意义。 不,模态控制器(呈现的视图控制器)的工作方式相同。这是 A 创建 B 的标准架构,B 必须在信息不存在时将信息交还给 A。即使使用现代警报控制器,您仍在向 B(警报)传递一个指向 A 的闭包,而 B 必须调用它。 hm 是的,它只是在处理闭包块时看起来不同。好吧,其实我还是很困惑。如果我想在viewWillDisappear:
中向 Bob 发送消息,除了导航回 Bob 之外,我还需要处理 Jane 将消失的情况……挑剔:***.com/questions/5217992/…【参考方案2】:
在 Interface Builder 中没有简单的单击和拖动操作。
UIViewController 上没有在推送的视图控制器弹出时调用的方法。
JaneViewController 必须向 BobViewController 发出信号。
class BobViewcontroller
var janeWasDismissed = false
override func viewWillAppear(animated: Bool)
super.viewWillAppear(animated)
if janesWasDismissed
// Do something
janeWasDismissed = false
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
if segue.identifier == "go-to-jane"
let destinationController = segue.destinationViewController as! JaneViewController
destinationController.delegate = self
self.janeWasDismissed = false
class JaneViewController
var delegate: BobViewcontroller?
func dismissJane()
if let delegate = delegate
delegate.janeWasDismissed = true
self.navigationController?.popViewControllerAnimated(false)
【讨论】:
以上是关于UIKit - 导航控制器确实导航回来时的操作的主要内容,如果未能解决你的问题,请参考以下文章