Ios 手动将ViewController添加到堆栈swift 3中
我正在我的应用程序中对注销按钮进行编码。这是我的应用程序的流程Ios 手动将ViewController添加到堆栈swift 3中,ios,swift3,uiviewcontroller,uinavigationcontroller,Ios,Swift3,Uiviewcontroller,Uinavigationcontroller,我正在我的应用程序中对注销按钮进行编码。这是我的应用程序的流程 secretCodeViewController->secretCodeViewController-> LoginviewController->DashboardViewController 在此仪表板视图控制器中,我有“注销”按钮 我的应用程序具有单点登录功能,用户登录后,下次打开应用程序时 DashboardViewController->DashboardViewController 每当用户单击“注销”按钮时,我都要提示
secretCodeViewController
->secretCodeViewController
->
LoginviewController
->DashboardViewController
仪表板视图控制器中,我有“注销”按钮
我的应用程序具有单点登录功能,用户登录后,下次打开应用程序时
DashboardViewController
->DashboardViewController
每当用户单击“注销”按钮时,我都要提示用户使用Loginviewcontroller
问题
当用户通过路径1时,我只需执行popviewcontroller
即可返回到上一个viewcontroller。但当用户通过第二条路径时
- 如何将
Loginviewcontroller
手动添加到我的
viewcontrollers堆栈是否执行相同的操作
- 如何检查当前ViewController堆栈中是否存在LoginviewController
请帮助我我想,下面的代码可以帮助你
for (var i = 0; i < self.navigationController?.viewControllers.count; i++) {
if(self.navigationController?.viewControllers[i].isKindOfClass(Loginviewcontroller) == true) {
self.navigationController?.popToViewController(self.navigationController!.viewControllers[i], animated: true)
break;
}
}
在Main.storyboard
文件上为LoginViewController
设置情节提要引用标识符
只要您想显示LoginViewController
就可以调用该函数
func launchLoginView() {
if let loginVC: LoginViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("LoginStoryboardID") as? LoginViewController {
// .instantiatViewControllerWithIdentifier() returns AnyObject! this must be downcast to utilize it
// LoginStoryboardID is the reference id for login view controller.
self.presentViewController(loginVC, animated: true, completion: nil).
// OR
//UIApplication.shared.keyWindow?.rootViewController = loginVC
}
}
基于用户登录状态的登录屏幕。
在AppDelegte.swift中
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let isLoggedAlready = //Get the login status
if isLoggedAlready == true {
if let dashBoardVC: DashboardViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("DashboardStoryboardID") as? DashboardViewController {
//Already logged in then directly launch dashboard vc.
//change the code based on your needs
window?.rootViewController = dasbBoardVC
}
}
// Otherwise let it go as flow 1
return true
}
}
在注销按钮操作中,您可以将此let navigation=mainStoryboard.instanceeviewcontroller(带有标识符:“LoginViewController”)添加为!LoginViewController让nav=UINavigationController(rootViewController:navigation)appdelegate.window!。rootViewController=nav
并将appdelegate=UIApplication.shared.delegate声明为!AppDelegate
和让mainStoryboard:UIStoryboard=UIStoryboard(名称:“Main”,bundle:nil)
globally我可以将其添加为第二视图控制器吗?不是根视图控制器?是的,您可以。。检查登录状态并推@user1960169No我的意思是现在你已经将其设置为root控制器了,不是吗?所以我想在我的splashViewcontroller之后插入它。我的根viewcontroller始终应为spaslviewcontroller。(这不是默认的启动文件)好的。然后在Splashview控制器上添加逻辑状态检查。不要更改window.rootViewController。在Splashviewcontroller中,在按下“密码”视图控制器之前,检查登录状态(如果已登录),然后不要转到“密码”视图,按下“仪表板”视图
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let isLoggedAlready = //Get the login status
if isLoggedAlready == true {
if let dashBoardVC: DashboardViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("DashboardStoryboardID") as? DashboardViewController {
//Already logged in then directly launch dashboard vc.
//change the code based on your needs
window?.rootViewController = dasbBoardVC
}
}
// Otherwise let it go as flow 1
return true
}
}