【问题标题】:how to insert iboutlets into a array (swift3)如何将 iboutlets 插入数组(swift3)
【发布时间】:2017-04-11 20:44:34
【问题描述】:

我正在尝试将多个 iboutets 分组到一个数组中。如果可以分组,这将使我的编码工作流程更快。我试图编写我的想法,但它不起作用。我正在尝试做的是围绕 let c = 部分。代码如下。

    import UIKit

class ViewController: UIViewController {
let c = {
@IBOutlet var a: UIButton!

@IBOutlet var b: UIButton!
}
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

@IBAction func turnOff(_ sender: Any) {
    c.isHidden = true

}}

【问题讨论】:

    标签: ios arrays button swift3 iboutlet


    【解决方案1】:

    根据您的需要,我看到三个选项:

    1.奥特莱斯系列

    如果您使用界面生成器,请在拖出插座时查找“插座集合”选项。

    这是手动创建插座集合的语法:

    @IBOutlet var buttons: [UIButton]!
    

    现在您可以将多个按钮连接到集合。缺点是您不再可以通过此插座轻松访问各个按钮。

    2。计算属性

    如果您想保留单独的插座以便于访问,我可能会创建一个返回集合的计算属性:

    @IBOutlet var a: UIButton!
    @IBOutlet var b: UIButton!
    var buttons: [UIButton] {
        return [a, b]
    }
    

    3.查看层次结构

    根据您的布局需要,您可以将所有按钮放入一个公共父视图中。现在只需隐藏/取消隐藏父视图。

    为选项 1 和 2 扩展集合

    您不能在按钮集合上使用isHidden 的原因是数组没有isHidden 属性。您将不得不遍历数组(Tom Harrington 在 cmets 中指出了这一点)。如果您必须做很多事情,您可以通过添加一个转发到数组元素的isHidden 属性的方法来扩展按钮数组。下面是一个将更通用的类型 Sequence 扩展为 UIView 元素(包括按钮数组)的示例:

    extension Sequence where Iterator.Element == UIView {
        func setHidden(_ hidden: Bool) {
            for view in self {
                view.isHidden = hidden
            }
        }
    }
    
    buttons.setHidden(true)
    

    【讨论】:

    • 我用 var 按钮尝试了你的第二个函数:[UIButton] { return [a, b] }。问题是buttons.isHidden = true 不起作用。
    • 那是因为它是一个数组。您需要更改数组中每个项目的isHidden,而不是数组本身。
    • 我有什么办法可以将所有按钮分组以提高 isHidden 的效率,还是我必须单独执行每个按钮。
    • 您可以将所有按钮放入一个视图中并隐藏该视图。
    【解决方案2】:
    1. 将按钮放在Stack View 中。

    2. Stack View 拖出一个出口。

    3. 最后,您将能够在 Stack View 上使用 isHidden 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多