Swift: 通过 presentViewController 传递导航栏

Swift: pass navigation bar through presentViewController

在我的情节提要中有 Navigation Controller、viewContrl1 和 viewContrl2。对于下一次更新,我必须设法将 viewContrl2 连接到 viewContrl2 的另一个实例。

从 Whosebug 获得一些帮助后,我通过以下方式管理它:

let newView2 : ViewContrl2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("viewContrl2") as! ViewContrl2
...
...
view2.presentViewController(newView2, animated: true, completion: nil)

它实际上完全符合我的要求,但顶部没有导航栏。 在 ViewContrl2 class 中,有 @IBOutlet weak var navigation: UINavigationItem!,这是我直接从 StoryBoard 连接的。但是,导航在新创建的 viewControl2 中似乎不起作用。我需要这个,因为用户必须能够按下返回并返回到上一个视图。任何人都有解决这个问题的方法吗?

谢谢

如果您希望 NavigationBar 被看到,请出示 NavigationController,如下所示:

let newView2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ViewContrl2") as! ViewContrl2

let navigationControlr = UINavigationController(rootViewController: newView2)

self.presentViewController(navigationControlr, animated: true, completion: nil)

要关闭 PresentedViewControllerviewDidLoad

中添加以下代码
//Customise the way you want:
self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Cancel, target: self, action: "backAction")

在您的 ViewController2 Class

中添加以下 function
func backAction(){

    if self.presentingViewController != nil{
        self.dismissViewControllerAnimated(true, completion: nil)
    }else{
        self.navigationController?.popViewControllerAnimated(true)
    }
}

要返回,您需要使用现有的导航控制器。 只需添加一个检查以确保。

let newView2 : ViewContrl2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("viewContrl2") as! ViewContrl2

if let navCtrl = self.navigationController
{
   navCtrl.pushViewController(newView2, animated: true)
}
else
{
   let navCtrl = UINavigationController(rootViewController: newView2)
   self.presentViewController(navCtrl, animated: true, completion: nil)
}