例如,是否可以一次设置.isHidden多个按钮,而不是:
button1.isHidden = true
button2.isHidden = true
button3.isHidden = true
Run Code Online (Sandbox Code Playgroud)
像:button1, button2, button3.isHidden = true.
除了@ ukim的答案,您还可以使用Outlet Collection.
在您的故事板中,从第一个按钮拖动并选择Outlet Collection而不是Outlet,就像通常那样.
哪个给你......
@IBOutlet var buttons: [UIButton]!
Run Code Online (Sandbox Code Playgroud)
然后将所有其他按钮连接到同一个按钮 @IBOutlet
然后你可以说
buttons.forEach {
$0.isHidden = true
}
Run Code Online (Sandbox Code Playgroud)
将它们放在一个数组中并遍历数组.
[button1, button2, button3].forEach {
$0.isHidden = true
}
Run Code Online (Sandbox Code Playgroud)
您还可以创建Array扩展。将元素类型限制为 也更有意义UIButton,这样您就不能为任何其他类型的数组调用它。
像这样的事情,
extension Array where Element == UIView {
func show() {
forEach { $0.isHidden = false }
}
func hide() {
forEach { $0.isHidden = true }
}
}
Run Code Online (Sandbox Code Playgroud)
然后,像这样使用它,
[button1, button2, button3].hide() // hide buttons
[button1, button2, button3].show() // show
Run Code Online (Sandbox Code Playgroud)
在这种情况下,扩展集合更有意义,这提供了更大的灵活性,因为隐藏/显示可以与 ArraySlices 一起使用。
以下是你将如何做到这一点,
extension Collection where Element: UIView {
func show() {
forEach { $0.isHidden = false }
}
func hide() {
forEach { $0.isHidden = true }
}
func toggleVisibility() {
forEach { $0.isHidden = !$0.isHidden }
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个你可以做一些很酷的事情,比如
// hide all but not first
myArrayOfButtons.dropFirst().hide()
// hide buttons in indexes 0 to 1
myArrayOfButtons[0 ... 1].hide()
// show all buttons but not last
myArrayOfButtons.dropLast().show()
// hide first 2 buttons
myArrayOfButtons.prefix(2).hide()
// show last button
myArrayOfButtons.suffix(1).show()
// toggle visibility of first 2
myArrayOfButtons.prefix(2).toggleVisibility()
Run Code Online (Sandbox Code Playgroud)