ios 如何使用导航控制器调用查看控制器

n7taea2i  于 2023-01-14  发布在  iOS
关注(0)|答案(5)|浏览(215)

我有一个视图控制器称为登录VC与导航视图控制器。我连接两个按钮在我的登录VC。第一个按钮将导航到注册屏幕作为按下segue。第二个按钮将导航到忘记密码屏幕作为按下segue。
现在,当用户登录并进入我的应用程序意味着。有一个按钮名为注销。我已经写了代码功能一样,当用户按下注销按钮一个uialert弹出窗口将询问“你想注销吗”。如果用户按下,他们将导航到再次登录屏幕。
因此,用户按下注销后,如果用户来到登录屏幕,如果用户按下我的两个按钮[即意味着忘记密码屏幕,注册屏幕按钮]。然后我得到崩溃。
崩溃报告:

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

但是我也遇到了同样的问题。现在我该如何重新编写我的代码在我的注销按钮的行动方法。以重定向到登录屏幕与导航栏。
帮帮我吧。谢谢!

9rnv2umw

9rnv2umw1#

您正在将RootViewController设置为ViewController,但您的应用程序是NavigationViewController。您的RootViewController应该是NavigationController。因此,请将LoginViewController添加到NavigationViewController并将该RootViewController设置为窗口。

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

zlwx9yxi2#

你为什么不这样做

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

当你想回来的时候

self.navigationController?.popViewControllerAnimated(true)
at0kjp5o

at0kjp5o3#

根据您的错误,在视图层次结构中找不到导航控制器。
从故事板和Editorembed inNavigation controller中选择您的loginViewController,使用performSegue推送视图控制器,使用popViewControllerpopTorootviewcontroller返回导航控制器。
希望这对你有帮助:)

rsaldnfx

rsaldnfx4#

1.单击以查看故事板中的控制器
1.转到编辑器-〉嵌入-〉导航控制器这将在此视图控制器上添加导航。
1.然后,您可以从一个视图控制器推送和弹出到另一个视图控制器。
例如:推动

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

流行音乐

self.navigationController?.popViewControllerAnimated(true)
zazmityj

zazmityj5#

尝试此解决方案:
让vc = self.故事板?.示例化视图控制器(带有标识符:"您的VC")作为!您的视图控制器,让导航控制器= UI导航控制器(根视图控制器:vc)自我呈现(导航控制器,动画:真,完成:无)

相关问题