Swift:通过presentViewController传递导航栏

时间:2016-08-04 23:41:31

标签: ios swift uinavigationcontroller uinavigationitem presentviewcontroller

在我的故事板中有导航控制器,viewContrl1和viewContrl2。对于下一次更新,我必须设法将viewContrl2转换为另一个viewContrl2实例。

在从stackOverflow获得一些帮助后,我通过以下方式进行了管理:

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

它实际上正是我想要的,但顶部没有navigationBar。 在ViewContrl2类中,有@IBOutlet弱变量导航:UINavigationItem !,我直接从StoryBoard连接。但是,似乎导航不能在新创建的viewContrl2中工作。我需要这个,因为用户必须能够按回去并返回上一个视图。任何人都有解决这个问题的方法吗?

谢谢

2 个答案:

答案 0 :(得分:4)

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

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)
}

答案 1 :(得分:3)

如果您希望看到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)

要解除PresentedViewController,请在viewDidLoad

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

function班级

中添加以下ViewController2
func backAction(){

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