2016-04-26 204 views
0

我有一個視圖控制器稱爲登錄VC與導航視圖controller.And我連接兩個按鈕在我的LoginVc.First按鈕將導航到signUp屏幕作爲推segue.Second按鈕將導航到忘記密碼屏幕爲推播。如何調用視圖控制器與導航控制器

現在當用戶登錄並輸入到我的應用意味着。有一個名爲Log out的按鈕名稱。我寫了代碼功能,當用戶按下注銷按鈕時,一個uialert彈出會問「你想要嗎?註銷「。如果用戶按下,他們將再次導航到登錄屏幕。

所以用戶按下注銷後,如果用戶來到登錄屏幕,如果用戶按我的兩個按鈕[我。 e意味着忘記密碼屏幕,註冊屏幕按鈕]。然後我崩潰了。

崩潰報告:

Terminating app due to uncaught exception 'NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController.' 

我的註銷按鈕代碼:

@IBAction func LogoutButton(sender: AnyObject) { 

    NSUserDefaults.standardUserDefaults().setBool(false, forKey: "ISLOGGEDIN") 

    NSUserDefaults.standardUserDefaults().synchronize() 

    dispatch_async(dispatch_get_main_queue(), { 


     let alert = UIAlertController(title: "Logout Successful", message: "You have successfully logged out.", preferredStyle: UIAlertControllerStyle.Alert) 

     // add an action (button) 
     alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){action -> Void in 

      let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as? LoginViewController 




      let appDelegate:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

      appDelegate.window?.rootViewController = loginViewController 


      }) 

     // show the alert 
     self.presentViewController(alert, animated: true, completion: nil) 

    }) 




} 

我嘗試加入這一行:

let vc: UINavigationController = storyboard.instantiateViewControllerWithIdentifier("LoginViewController") as! UINavigationController 

但我得到相同problem.Now怎麼能我將我的代碼寫入我的註銷按鈕操作方法。使用導航欄重定向到登錄屏幕。

請幫幫我。謝謝!

回答

1

您設置RootViewController的一個視圖控制器,但是您的應用程序是NavigationViewController。你的RootViewController應該是一個NavigationController。因此,將您的LoginViewController添加到NavigationViewController並設置該窗口的rootViewController。

let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as? LoginViewController 
let navigationController = UINavigationController(rootViewController: vc) 
window.rootViewController = navigationController 
1

你爲什麼不這樣做:

self.navigationController?.pushViewController(loginViewController!, animated: true) 

,當你想回來:

self.navigationController?.popViewControllerAnimated(true) 
+0

看看這個教程:http://code.tutsplus.com/tutorials/ios-from快速導航控制器和視圖控制器層次結構 - cms-25462 –

+0

你可以發佈一些示例代碼,它將與我的登錄導航控制器導航scren – user5513630

+0

它在上面的答案中,查看教程來理解這個邏輯。 –

1

根據你的錯誤是在您的視圖層次沒有發現導航控制器。

從故事板和Editorembed inNavigation controller中選擇您的loginViewController。並使用performSegue來推送視圖控制器並使用popViewControllerpopTorootviewcontroller返回導航控制器。

希望這將有助於:)

1
  1. 點擊的viewController在故事板
  2. 轉到編輯器 - >嵌入在 - >導航控制器這將增加該視圖控制器上的導航。
  3. 然後,您可以從一個視圖控制器推送並彈出到另一個視圖控制器。

例:

var dash : XyzViewController = storyBoard.instantiateViewControllerWithIdentifier("xyz") as! XyzViewController 
self.navigationController?.pushViewController(dash, animated: true) 

流行

self.navigationController?.popViewControllerAnimated(true) 
相關問題