在 Swift 中使用标签

Using tags in Swift

我的控制器中有大约 15 个 UIButton。我试图用一个简单的 for 循环清除其中的 10 个,看起来我遇到了某种冲突。

当我按下清除按钮时,出现以下错误:

Could not cast value of type '_UISizeTrackingView' (0x18a023c) to 'UIButton' (0x1899298). (lldb)

For 循环是:

for var i = 0; i < 9; i++ {
    button = view.viewWithTag(i) as! UIButton
    button.setImage(nil, forState: .Normal)
}

我已将其缩小为使用标签 0 的项目的问题。我查看了我的视图控制器场景中的所有项目,似乎没有发现任何冲突。我只看到一个按钮使用 tag = 0.

我什至通过将循环中的 'i' 替换为“0”来确认它并遇到了同样的问题。当我将其替换为“1”或“2”时,它可以很好地处理那张图片。

有什么方法可以查看什么对象正在使用标记 0?我都点击了它们(包括主要 'View')但似乎找不到任何东西。

默认情况下,视图的标签为 0,因此您不应指望它会删除标签为 0 的对象。尝试为您的按钮提供一组不同的标签,例如:1000、1001、1002 , 等等

正如@ranunez 所说,默认标签为 0。我不同意使用非零标签的建议。

我的建议是,根本不要使用标签。如果你想在代码中使用一个视图,为它声明一个出口并连接它。如果您想遍历多个视图,请从您的网点创建一个数组或使用一个网点集合:

@IBOutlet var buttons: [UIButton]!