关于遍历 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;
}
Anda tidak mengambil UIButton secara langsung, atau saya salah faham, anda menukar jenis secara eksplisit.
Tidak semestinya ada UIButton sahaja dalam subview, tetapi mungkin terdapat kawalan lain Anda memaksa semua kawalan ke UIButton, yang sangat berbahaya dan akan ranap jika anda tidak berhati-hati.
Cara selamat adalah dengan terlebih dahulu menentukan sama ada kawalan yang diperolehi adalah UIButton, dan kemudian menukar paksa Jenis kawalan pada masa ini sebenarnya sudah diketahui Penukaran paksa hanya menggunakan kaedah dan sifat UIButton tanpa melaporkan ralat.
Selain itu, id bukan atribut, sayang, ia adalah jenis oc istimewa, anda boleh menganggapnya sebagai objek. Mana-mana objek boleh ditaip dengannya.
Ini kerana self.view anda tidak semestinya hanya mempunyai butang. Apakah yang perlu anda lakukan jika terdapat label di dalamnya apabila anda menggunakan uibutton untuk memaksa pemindahan? Ia akan melaporkan ralat.
Melainkan anda memastikan semua subview paparan adalah jenis butang, anda pasti akan membuat ralat apabila anda menekan kepala keldai pada badan manusia.