Swift -循环通过不同的对象类型



Current我这样做是为了遍历我所有的按钮:

for objects in view.subviews {
if let object = objects as? UIButton {
object.isEnabled = false
}
}

我可以在这个循环中也包括UIViewUILabel吗?

我想要的不是objects as? UIButton,而是objects as? UIButton, UIView, UILabel

不能设置标签和其他UIViewsisEnabled属性。只有从UIControl继承的对象才具有isEnabled属性。

我建议不要循环遍历视图的所有子视图并禁用所有控件。这是一支非常"短枪"。接近,易碎。

它的一个问题是,如果你的视图层次结构有任何复杂性,它将不起作用。例如,如果在堆栈视图中有按钮,代码就会错过它们。或者说它们在表视图中。那也不行。

相反,我建议将您想要禁用的控件的出口放入viewDidLoad()方法中的数组中。然后,当您想禁用它们时,循环遍历该数组并将每个isEnabled设置为false。

你可以这样做:

for objects in view.subviews {
if let object = objects as? UIButton {
object.isEnabled = false
}
if let object = objects as? UIView {
object.isHidden = false
}
if let object = objects as? UILabel {
object.isEnabled = false
}
}

另一种方法是为相关的UI元素分配标签。

在循环(或forEach闭包)中检查标签是否在要求的范围内,并有条件地将视图向下转换为UIControl

view.subviews.forEach{ subView in
guard (100...105).contains(subView.tag) else { return }
(subView as? UIControl)?.isEnabled = false
}

最新更新