问题描述
关于遍历 View 上所有的 UIButton 的问题,求问
for (id obj in self.view.subviews) { if ([obj isKindOfClass:[UIButton Class]]) { UIButton theButton = (UIButton)obj; theButton.xxx = ooo; } }
为什么在控件上遍历子控件时我们要在 for in 中取 id 属性再做 if ([obj isKindOfClass:[UIButton Class]])判断而不能直解取 uibutton ,像下面这样:
for (id obj in self.view.subviews) { UIButton theButton = (UIButton)obj; theButton.xxx = ooo;
}
问题解答
回答1:你这也不是直接取UIButton啊,还是我理解有误,你这是显式的转换类型了。
回答2:subview里面不一定只有UIButton,也可以有其他控件,你这样是将所有控件强制转换为UIButton,这是很危险的,一不小心就会崩溃。 安全的做法是先判断取到的控件是不是UIButton,再强制转换,此时的控件类型其实是已经知道了的,强制转换只是为了使用UIButton的方法和属性而不会报错而已。另外id不是属性吧亲,它是oc一种特殊类型,你可以看做是object。任何对象都能用它做类型。
回答3:就是因为你的self.view不一定只有button。你用uibutton强转如果里面是个label怎么办。会报错吧。
回答4:除非你确定view的所有subviews都是button类型,不然你把驴头按到人身上肯定会出错的。