【问题标题】:Switch tab bar programmatically in Swift在 Swift 中以编程方式切换标签栏
【发布时间】:2015-03-21 20:34:23
【问题描述】:

我有一个标签栏应用程序,并且在我的第一个视图上有一个按钮,当按下该按钮时,我想在标签栏中以编程方式切换到我的第二个标签。

我似乎无法弄清楚如何让索引等切换到它我已经尝试过这样的东西。

tababarController.selectedIndex = 1

没有成功。

【问题讨论】:

    标签: xcode swift uitabbarcontroller


    【解决方案1】:

    很简单的 tabBarController 被声明为可选类型

    var tabBarController: UITabBarController? { get }
    

    视图控制器层次结构中最近的祖先是标签栏 控制器。如果视图控制器或其祖先之一是孩子 标签栏控制器,此属性包含拥有的标签栏 控制器。如果视图控制器不是,则此属性为零 嵌入在标签栏控制器中。

    所以你只需要添加“?”最后:

    @IBAction func goToSecond(_ sender: Any) {
        tabBarController?.selectedIndex = 1
    }
    

    【讨论】:

    • 有没有办法让标签滑动而不是突然改变?
    • @vinbhai4u 对冗长的反馈回复感到抱歉。我现在才看到你的评论:(。如果你是 UITabBarController 的子类,你只需要设置 selectedIndex selectedIndex = 1
    【解决方案2】:

    Leo Dabus 提供的解决方案(见上文)对我来说效果很好。但是 - 一些控件的状态不好。无法解决这个问题,但是这个小解决方法对你们都有好处:

    func switchToDataTab(){
        NSTimer.scheduledTimerWithTimeInterval(0.2,
            target: self,
            selector: "switchToDataTabCont",
            userInfo: nil,
            repeats: false)
    }
    
    func switchToDataTabCont(){
        tabBarController!.selectedIndex = 0
    }
    

    【讨论】:

    • 我实际上遇到了非常相似的问题。 UITableView 状态没有改变,甚至 tableView.reloadData() 也被调用了。 Tx 提供了解决方法!您可能想到了它背后的推理还是更好的解决方案?
    • Swift 5.0 需要 Timer。
    【解决方案3】:

    添加到安东尼的代码:

    func switchToDataTab(){
        NSTimer.scheduledTimerWithTimeInterval(0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil,repeats: false)
    }
    
    func switchToDataTabCont(){
        tabBarController!.selectedIndex = 0
    }
    

    选择器类已更改为

    #selector(switchToDataTabCont)
    

    【讨论】:

      【解决方案4】:

      斯威夫特 3:

      func switchToDataTab() {
          Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
      }
      
      func switchToDataTabCont(){
          tabBarController!.selectedIndex = 0
      }
      

      斯威夫特 4+:

      func switchToDataTab() {
          Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(switchToDataTabCont), userInfo: nil, repeats: false)
      }
      
      @objc func switchToDataTabCont(){
          tabBarController!.selectedIndex = 0
      }
      

      【讨论】:

      • 这是一个简单的想法,但它确实很有效,有时单击相同的 TabViewController 屏幕.. 非常感谢你们..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      相关资源
      最近更新 更多