objective-c - 关于遍历 View 上所有的 UIButton 的问题,求问

浏览:50日期:2023-12-11

问题描述

关于遍历 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类型,不然你把驴头按到人身上肯定会出错的。

相关文章: