show
我有三个主视图控制器 A、B、C,它们按segue的顺序呈现。所有三个视图控制器都嵌入在它们自己的导航控制器中。在关闭 C 上呈现的模态控制器 D 后,我想回到控制器 A 并在它出现之前重新加载数据。
我参考了this question中的解决方案来展开segue并在控制器A中编写了一个动作(我使用AViewController来表示控制器A的类):
@IBAction func prepareForUnwindSegue(segue: UIStoryboardSegue?) {
if let destController = segue?.destinationViewController as? AViewController {
destController.reload()
}
}
override func canPerformUnwindSegueAction(action: Selector, fromViewController: UIViewController, withSender sender: AnyObject) -> Bool {
return self.respondsToSelector(action)
}
我通过上述操作在控制器 A 和 C 之间拖出退出,并将 unwind segue 命名为unwindToA
。然后在名为 CViewcontroller 的控制器 C 类中,我在一个 ActionSheet 中调用模态视图 D,如下所示:
let presentDAction = UIAlertAction(title: "Present D", style: .Default, handler: {(_) -> Void in
let controller: AnyObject? = self.storyboard!.instantiateViewControllerWithIdentifier("DView")
if let c = controller as? DViewController {
let navi = UINavigationController(rootViewController: c)
navi.modalPresentationStyle = UIModalPresentationStyle.FullScreen
// the following block wait and execute after view controller D dismissed
c.refreshAndUnwind = {[weak self](refresh) in
if let weakSelf = self {
if(refresh) {
weakSelf.performSegueWithIdentifier("unwindToA", sender: weakSelf)
}
}
}
}
})
视图控制器确实成功地展开并重新加载数据。但是,导航栏似乎仍然在控制器 C 上,并且它的标题消失了。我试图在 A 和 C 之间拖动退出导航控制器,并将 unwind segue 动作调用修改为weakSelf.navidationController!.performSegueWithIdentifier("unwindToA", sender: weakSelf)
,但它不起作用。我在我的 segue 展开时做错了什么导致这个问题吗?