有条件地在选项卡栏项后面选择viewcontroller

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有条件地在选项卡栏项后面选择viewcontroller相关的知识,希望对你有一定的参考价值。

我无法理解如何选择标签栏项目后面的视图控制器。因此,我有一个标签栏控制器作为应用程序的根视图。该标签栏包含4个项目,其中一个是“帐户”标签。我要完成的事情是,如果用户登录,它将把他发送到帐户概览视图控制器,但是当他未登录时,将获得登录屏幕。

因此架构在任何一种方式上都必须相同。我想从同一屏幕(我的标签栏控制器)开始,但只有在用户点击帐户标签时,才需要在2个视图控制器之间进行选择。

这可能吗?如果是,有人可以向我解释这个概念吗?

谢谢您的帮助!

亲切的问候

答案

您需要将根控制器更改为选项卡控制器,以便在用户无法登录时像这样登录viewcontroller,他将重定向到signinviewController

let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var vc = mainStoryboard.instantiateViewControllerWithIdentifier("controllerIdentifiersetonvStroyboard") as SignViewController  
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.window?.rootViewController = vc
另一答案
func tabBarController(_ tabBarController: UITabBarController,
                      shouldSelect viewController: UIViewController) -> Bool
    let index = tabBarController.viewControllers?.index(of: viewController)
    if index == 2 // Index of Account tab
        let userLoginStatus = NSUserDefaults.standardUserDefaults().boolForKey("isUserLoggedIn")

        if !(userLoginStatus)
        
            let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let loginVC = mainStoryBoard.instantiateViewControllerWithIdentifier("Login") as! LoginViewController
            window!.rootViewController = loginVC
            window!.makeKeyAndVisible()
        
    
    return true// you decide

NOTE:shouldSelect委托方法可用于实现所需的结果。

链接:-https://developer.apple.com/documentation/uikit/uitabbarcontrollerdelegate/1621166-tabbarcontroller?language=objc

以上是关于有条件地在选项卡栏项后面选择viewcontroller的主要内容,如果未能解决你的问题,请参考以下文章

如何减小 UI 选项卡栏项图像的大小以使其适合选项卡栏?

选项卡栏项显示具有模态序列的视图控制器

添加选项卡栏项 (UITabBar) 时 XCode 4.3 崩溃

将选项卡栏项与在其堆栈中显示第二个视图控制器的导航控制器相关联?

导航回父视图控制器时,UIButton 在选项卡栏后面 - iOS

如何将值从 ViewController 传递到选项卡栏,然后将 Tabor 传递到 ViewController 到选项卡栏中的第一个选定项目