在我的故事板中有导航控制器,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中工作。我需要这个,因为用户必须能够按回去并返回上一个视图。任何人都有解决这个问题的方法吗?
谢谢
答案 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)
}
}