【发布时间】:2016-01-22 05:02:54
【问题描述】:
我正在创建一个井字游戏应用程序。当游戏重置时,所有 Xs 和 Os UIButton 图像应返回到 nil。棋盘中的每个空格都标记为 0 到 8。
var buttonsToClear : UIButton
for var i = 0; i < 9; i++ {
buttonsToClear = view.viewWithTag(i) as! UIButton
buttonsToClear.setImage(nil, forState: .Normal)
}
在我添加导航栏之前一切正常。现在我收到错误消息
“无法将 '_UINavigationBarBackground' (0x107e2f2a0) 类型的值 > 转换为 'UIButton' (0x107e357e0)。 (lldb)
我绝对确定我的新导航栏的标签是“10”。
还有什么可能触发此消息?
【问题讨论】:
-
导致崩溃的不是导航栏本身,而是导航栏背景,这是
UINavigationBar的私有属性 -
尝试在循环顶部打印
print("i = \(i): \(view.viewWithTag(i)?.description ?? "")"),只是为了查看viewWithTag显然返回非按钮视图的标签值和视图对象。此外,可以在viewDidLoad中以编程方式为 UIButtons 和导航栏设置标签值。 -
另外,考虑有条件的展开:
if let buttonsToClear = view.viewWithTag(i) as? UIButton { .... },并且仅当它是一个按钮时才设置图像。这是一种很好的做法,更安全,如果您更改标签,您将永远不会尝试将 setImage 设置为某个东西而不是按钮。
标签: ios swift cocoa-touch