我有一个名为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
但是我遇到了同样的问题。现在我怎样才能在我的注销按钮操作方法中编写代码。使用导航栏重定向到登录界面。
请帮帮我。谢谢!
答案 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并使用popViewController
或popTorootviewcontroller
返回导航控制器。
希望这会有所帮助:)
答案 3 :(得分:1)
例如:推送
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)