UIKit - 导航控制器导航回来时的动作

时间:2016-03-14 15:12:39

标签: ios uikit

这应该是微不足道的,但我找不到任何东西:

我有一个带导航控制器的简单故事板,我从一个名为“Bob”的视图控制器中推出一个视图控制器,让我们称之为“Jane”。

因此,在点击“后退”按钮后,当Jane被解雇时,Bob想要做某事,如下所示:

- (IBAction) janeWasDismissed:(UIViewController *)jane
{
   // bob wants to ask what Jane did.
}

这是最简单的事吗?但我无法弄明白,肯定Unwind Segues不是正确的方法吗? 必须有一个简单的点击&在Interface Builder中执行此操作,或者在推送的视图控制器弹出时调用的UIViewController上的方法?

谢谢!

2 个答案:

答案 0 :(得分:0)

实际上它根本不是微不足道的。如果Bob需要来自Jane的信息,您需要安排以便Jane将该信息发送回Bob。例如,在Jane的viewWillDisappear:中,她可以自己引用Bob(通过它们共享的导航控制器)并在Bob中调用一些方法。

你可能会(非常合理地)反对这意味着对Jane的鲍勃的课程有所了解。 的通常解决方案更为重要:正如他召唤Jane一样,Bob让Jane自己可以作为Jane委员会的委托演员。因此Jane只需要知道Bob的一种方法 - 不是他的实际课程,而是她自己在协议中指定的方法。

答案 1 :(得分:0)

没有简单的点击&在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)
        }
    }
}