如何使用导航控制器调用视图控制器

时间:2016-04-26 10:36:21

标签: ios iphone swift

我有一个名为login VC的视图控制器,带有导航视图控制器。我在LoginVc.First按钮中连接两个按钮将导航到signUp屏幕作为push segue.Second按钮将导航到忘记密码屏幕作为推送segue。

现在,当用户登录并输入我的应用程序时。有一个名为Log out的按钮名称。我编写了代码功能,例如,当用户按下注销按钮时,一个uialert弹出将询问“你想要注销“。如果用户按下,他们将再次导航到登录屏幕。

因此,在用户按下注销并且用户进入登录屏幕并且如果用户按下我的两个按钮[i。 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

但是我遇到了同样的问题。现在我怎样才能在我的注销按钮操作方法中编写代码。使用导航栏重定向到登录界面。

请帮帮我。谢谢!

4 个答案:

答案 0 :(得分:3)

您正在将RootViewController设置为ViewController,但您的应用程序是NavigationViewController。你的RootViewController应该是一个NavigationController。所以将LoginViewController添加到NavigationViewController并设置windowView的rootViewController。

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

答案 1 :(得分:1)

你为什么不这样做:

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

当你想回来时:

self.navigationController?.popViewControllerAnimated(true)

答案 2 :(得分:1)

根据您的错误,您的视图层次结构中找不到导航控制器。

从故事板和Editor embed in Navigation controller中选择您的loginViewController。并使用performSegue推送viewcontroller并使用popViewControllerpopTorootviewcontroller返回导航控制器。

希望这会有所帮助:)

答案 3 :(得分:1)

  1. 点击查看storyBoard中的控制器
  2. 转到编辑器 - >嵌入 - >导航控制器这将在此视图控制器上添加导航。
  3. 然后,您可以从一个视图控制器推送和弹出到另一个视图控制器。
  4. 例如:推送

    SELECT Sum(CASE 
                    WHEN UpdatedAdjustedOT IS NOT NULL
                        AND UpdatedAdjustedOT != ''
                        AND UpdatedAdjustedOT != '0'
                        THEN CONVERT(DECIMAL(18, 2), UpdatedAdjustedOT)
                    ELSE 0
                    END) AS OTHours
        FROM tbl_OTAuthorization
        WHERE EmployeeCodeFK = @EmployeeCode
            AND month(OTDate) = Month(@FromDate)
            AND year(OTDate) = Year(@FromDate)
    

    <强>弹出

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