1

在我的故事板中有导航控制器,viewContrl1和viewContrl2。对于下一次更新,我必须设法将viewContrl2移到另一个viewContrl2实例。Swift:通过导航栏通过presentViewController

从计算器后得到一些帮助,我通过它管理:

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

这实际上使我想要什么,但没有的导航栏上的顶部。 在ViewContrl2类中,有@IBOutlet weak var navigation:UINavigationItem !,我直接从StoryBoard连接。但是,它看起来像导航不工作在新创建的viewContrl2。我需要这个,因为用户必须能够按回去并返回到先前的视图。任何人都可以解决这个问题?

谢谢

+0

ViewContrl2是UINavigationController的子类吗? –

+0

好吧所以...我不熟悉故事板,但是从导航控制器的关系是View1Control的“根视图控制器”,然后通过从View1Controller中push segue调用View2Contrl,最后通过presentViewController从view2Contrller调用新的View2Control。导航显示为view1Contrl和view2Contrl,但它甚至不会出现在view2Contrl – hikki

回答

3

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

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

好吧...所以它实际上工作。 但是,在加载完所有newViewController2之后,它立即崩溃,我不知道为什么... – hikki

+0

请发布您的其他代码。 –

+0

nvm它的工作原理。我不小心推了两次 – hikki

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) 

驳回PresentedViewControllerviewDidLoad

//Customise the way you want: 
self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Cancel, target: self, action: "backAction") 

添加以下代码在您的ViewController2类中添加以下function

func backAction(){ 

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

它显示,但它似乎与View1Control和View2Control的导航断开连接。它显示回到左上角的按钮,但它什么都不做。例如,在view2Control - > new view2Control的情况下,如果用户按下回到newView2Controller中,它必须返回到view2Controller。 – hikki

+0

我编辑了答案。请检查 –

+0

从这篇文章我学到了很多。你的代码必须工作,但Chrsitian的答案似乎更有效率,所以我用他的。但我非常感谢你的帮助。非常感谢。 – hikki