【问题标题】:How do I access the viewControllers on the UITabbarController in swift?如何快速访问 UITabbarController 上的 viewControllers?
【发布时间】:2015-10-20 05:05:52
【问题描述】:

我正在尝试获取 tabbarcontroller 的第二个视图控制器,以便我可以 popToRoot 但 Swift 告诉我使用 Int 作为下标是无效的,我必须使用 AnyObject 作为索引

var controller = self.viewControllers[2] as! UIViewController

错误是“Cannot subscript a value of type [AnyObject]? with an Int”

【问题讨论】:

    标签: ios swift uitabbarcontroller


    【解决方案1】:
    var controller = self.viewControllers![2] as! UIViewController
    

    【讨论】:

      【解决方案2】:

      viewcontrollers 数组从零开始,因此第一个控制器的索引为 0,第二个控制器的索引为 1 所以对于第二个控制器,代码应该是

      var controller = self.viewControllers![1] as! UIViewController

      【讨论】:

      • 除了从零开始的索引问题外,请务必在您的回答中指出 self.viewControllers 是可选的。您在下标之前将其解包,这是 @angel_of_code 丢失的内容,因此报告了错误。
      【解决方案3】:

      获取实际的 ViewController 实例:

      var controller = self.viewControllers![0].childForScreenEdgesDeferringSystemGestures
      

      【讨论】:

        【解决方案4】:

        如果您有一个 UIViewController 嵌套在 UINavigationController 中:

        if let destNav = viewControllers?[1] as? UINavigationController {
            if let destVC = destNav.children.first as? YourViewController {
                //do stuff
            }           
        }
        

        如果您有多个UINavigationControllers 可用,则必须测试要输入的索引号:viewControllers?[0]viewControllers?[2] 或其他。

        【讨论】:

        • 请注意,在 Swift 的较新版本中,如果您有超过 5 或 6 个选项卡,用户可以自行移动它们。这使得这种方法不起作用,所以如果你有很多选项卡,你需要查找导航控制器的索引而不是硬编码索引
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 2017-03-03
        • 2016-10-01
        相关资源
        最近更新 更多