0

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 展开时做错了什么导致这个问题吗?

4

2 回答 2

1

有时使用故事板并不是做事的最佳方式。在你的情况下,我会这样做:

    var viewControllers = self.navigationController!.viewControllers
    var controllerA = viewControllers[0] as! ControllerA
    controllerA.reloadStuff()
    var newViewControllers = [ controllerA ]
    self.navigationController!.setViewControllers(newViewControllers, animated: true)

这样代码就干净多了。您可以在每个视图的 viewDidAppear 中设置 navigationItem 的标题,如果您对它有问题,您可以确保它总是会被调用。

于 2015-09-01T09:28:17.033 回答
0

所以问题很简单:在我尝试修改我的情节提要并删除那些不必要的导航控制器后,它的表现还不错。

于 2015-09-02T01:57:24.737 回答