关于遍历 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;
}
UIButton을 직접 가져오지 않았거나, 유형을 명시적으로 변환하고 있다고 오해했습니다.
하위 뷰에 반드시 UIButton만 있는 것은 아니지만 다른 컨트롤도 있을 수 있습니다. 모든 컨트롤을 강제로 UIButton으로 변환하는 것은 매우 위험하며 주의하지 않으면 충돌이 발생합니다.
안전한 방법은 먼저 획득한 컨트롤이 UIButton인지 확인한 다음 강제 변환하는 것입니다. 이때의 컨트롤 유형은 실제로 이미 알려져 있습니다. 오류.
게다가 id는 속성이 아니라 oc의 특수한 유형이므로 객체라고 생각하시면 됩니다. 어떤 객체든 입력할 수 있습니다.
그 이유는 self.view에 반드시 버튼만 있는 것은 아니기 때문입니다. uibutton을 사용하여 강제 전송하는 경우 내부에 라벨이 있으면 어떻게 해야 합니까? 오류가 보고됩니다.
뷰의 모든 하위뷰가 버튼형인지 확인하지 않는 이상 인체에 당나귀 머리를 눌렀을 때 반드시 오류가 발생하게 됩니다.