Rya*_*gue 4 cocoa-touch ios swift
我正在创建一个Tic Tac Toe应用程序.当游戏重置时,所有X和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)
}
Run Code Online (Sandbox Code Playgroud)
在我添加导航栏之前,一切正常.现在我收到错误消息
"无法将'_UINavigationBarBackground'(0x107e2f2a0)>类型的值转换为'UIButton'(0x107e357e0).(lldb)
我绝对肯定我的新导航栏标签为"10".
还有什么可以触发这条消息?
你在逻辑上是正确的,你的代码将完美地运作.
你收到了错误
"无法投型的值 '_UINavigationBarBackground'(0x107e2f2a0)>为 '的UIButton'(0x107e357e0).(LLDB)
因为,当你for loop运行时,第一个索引将为零,即i = 0,
buttonsToClear = view.viewWithTag(i) as! UIButton
Run Code Online (Sandbox Code Playgroud)
会变成
buttonsToClear = view.viewWithTag(0) as! UIButton
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,您尝试使用tag值0 获取视图.
UINavigationBarBackground 标签值也为0.
注意:
1.当系统找到两个具有相同标记值的视图时,如果您尝试使用viewWithTag:它查看视图将返回第一个视图.
2.每个视图的默认标记值为0.
3.只需在故事板或XIB中拖动UILabel或UIView并检查其标记值.
所以在你的情况下,它将返回UINavigationBarBackground而不是UIButton.所以你不能类型转换UINavigationBarBackground成UIButton.
解决您的错误:
永远不要给从0开始的标签.尝试给出一些像1000这样的值的标签.所以你的第一个按钮将有1000个标签,接下来将有1001,然后是1002等等.
写下你的for循环如下.
var buttonsToClear : UIButton
for var i = 1000; i < 1009; i++ {
buttonsToClear = view.viewWithTag(i) as! UIButton
buttonsToClear.setImage(nil, forState: .Normal)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |