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