这应该是微不足道的,但我找不到任何东西:
我有一个带导航控制器的简单故事板,我从一个名为“Bob”的视图控制器中推出一个视图控制器,让我们称之为“Jane”。
因此,在点击“后退”按钮后,当Jane被解雇时,Bob想要做某事,如下所示:
- (IBAction) janeWasDismissed:(UIViewController *)jane
{
// bob wants to ask what Jane did.
}
这是最简单的事吗?但我无法弄明白,肯定Unwind Segues不是正确的方法吗? 必须有一个简单的点击&在Interface Builder中执行此操作,或者在推送的视图控制器弹出时调用的UIViewController上的方法?
谢谢!
答案 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)
}
}
}