【发布时间】:2015-11-26 09:24:29
【问题描述】:
我有三个主视图控制器 A、B、C,它们按show segue 的顺序呈现。所有三个视图控制器都嵌入在它们自己的导航控制器中。在关闭 C 上呈现的模态控制器 D 后,我想回到控制器 A 并在它出现之前重新加载数据。
我参考了this question的方案unwind 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 之间拖出退出,并将展开转场命名为 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 展开时做错了什么导致了这个问题?
【问题讨论】:
标签: swift uinavigationcontroller uinavigationbar unwind-segue