【问题标题】:Comparing UIViewController instances比较 UIViewController 实例
【发布时间】:2015-07-19 10:55:57
【问题描述】:

我正在构建一个带有自定义标签栏的应用程序。其中一个按钮不会选择相应的视图控制器,而是会触发一些自定义代码(例如模态打开)。

我将 UITabBarController 子类化为:

import UIKit

class MyTabBarController: UITabBarController, UITabBarControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        delegate = self
    }

    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
        if (viewController == self.viewControllers[2]) {
            return false
        }

        return true
    }
}

但是,viewController == self.viewControllers[2] 的比较似乎不起作用。我收到以下错误:

找不到接受所提供参数的== 的重载

作为 Swift 的新手,我找不到任何材料来解释如何比较对象的特定实例,或者这是否是正确的方法。

如何更改此代码以使其正常工作?

【问题讨论】:

  • 你为什么继承UITabBarController?为此,您需要做的就是实现委托方法
  • 我这样做是为了能够将一些自定义样式应用于栏。该代码在我的示例中已被编辑,因为它不相关。

标签: ios xcode swift uiviewcontroller uistoryboard


【解决方案1】:

首先(使其工作):打开self.viewControllers

if (viewController == self.viewControllers![2]) {
    return false
}

为了更安全,请参阅this answer

第二个(使其正确):删除不需要的括号,这显然会给编译器带来问题:

if viewController == self.viewControllers![2] {
    return false
}

这样您实际上会收到更有用的错误消息:

无法为“[UIViewController] 类型的值下标?”具有“Int”类型的索引

这样可以更好地提示您出了什么问题。

【讨论】:

  • 我明白了!我将不得不查找更多展开。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多