首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在tabBar上快速显示不同的tabBar

如何在tabBar上快速显示不同的tabBar
EN

Stack Overflow用户
提问于 2021-02-18 12:51:51
回答 3查看 712关注 0票数 1

我有三个viewControllers,其中两个连接到一个tabBarController。因此,在点击tabBar项目这是我的故事板时,应用程序应该显示两个vc中的一个取决于Bool值。

代码语言:javascript
复制
import UIKit

class TabBarController: UITabBarController, UITabBarControllerDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
      
        
    }
    
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        let userLoggedIn: Bool!
        if tabBarController.selectedIndex == 1{
            if userLoggedIn == true{
                // show firstVC
            }else{
                // show secondVC
            }
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-02-19 08:34:15

只需将.overCurrentContext添加到viewDidLoad中的modalPresentationStyle中,如下所示。

代码语言:javascript
复制
 let newVC = self.storyboard?.instantiateViewController(withIdentifier:"secondVC")
 newVC?.modalPresentationStyle = .overCurrentContext
 self.present(newVC!, animated: false, completion: nil)
票数 0
EN

Stack Overflow用户

发布于 2021-02-18 13:06:29

您可以将childViewController与父ViewController fromStoryboard一起使用。

代码语言:javascript
复制
   override func viewDidLoad() {
        super.viewDidLoad()
        
       ///add two ChildVC here, hide 1 ifneeded
    }

单击此选项卡时,您将检查userLoggedIn

代码语言:javascript
复制
   override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        if userLoggedIn == true {
               /// show first childVC
               /// hide second childVC
         } else {
                /// hide first childVC
               /// show second childVC
         }
    }

您可以查看演示:演示

票数 0
EN

Stack Overflow用户

发布于 2021-02-18 14:18:21

只需在修改viewController变量(假设userLoggedIn是TabBarCOntroller实例变量)时设置userLoggedIn列表:

代码语言:javascript
复制
class TabBarC: UITabBarController {

    @IBOutlet var firstVC : FirstViewController!
    @IBOutlet var secondVC : SecondViewController!
    @IBOutlet var thirdVC : ThirdViewController!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        for vc in self.viewControllers! {
            if let fv = vc as? FirstViewController {
                firstVC = fv
            } else if let fv = vc as? SecondViewController  {
                secondVC = fv
            } else if let fv = vc as? ThirdViewController  {
                thirdVC = fv
            }
        }
    }


    var userLoggedIn : Bool = false {
        didSet {
        if userLoggedIn {
            self.viewControllers = [firstVC, thirdVC]
        } else {
            self.viewControllers = [secondVC, thirdVC]
        }
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self. userLoggedIn = false
    }

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        if item.tag == 3 { // For purpose of test i set tag for 3 VC to 1 for firsttVC, 2 for secondVC, 3 for thirdVC
            // for test : change login value each time thirdVC is selected
            userLoggedIn = ! userLoggedIn
        }
    }

因此,每次在代码中的任何地方设置userLoggedIn时,tabor都会显示想要的选项卡条项。将3 VC添加到stpryboard中的选项卡中。选择thirdVC时,第一个选项卡项在1和2之间更改

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66260356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档