如何一次将值设置为多个按钮或标签?

Anv*_*vil 9 swift

例如,是否可以一次设置.isHidden多个按钮,而不是:

button1.isHidden = true    
button2.isHidden = true    
button3.isHidden = true     
Run Code Online (Sandbox Code Playgroud)

像:button1, button2, button3.isHidden = true.

Ash*_*lls 7

除了@ 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)


uki*_*kim 6

将它们放在一个数组中并遍历数组.

[button1, button2, button3].forEach {
    $0.isHidden = true
}
Run Code Online (Sandbox Code Playgroud)


San*_*eep 5

您还可以创建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)