36

多个IBOutlets

我使用这些(标有红色边框)IBOutletsctrl + drag

但我不喜欢 9 次完全相同的线(干)

我如何将这些 IBOutlets 放入一个数组中?

4

5 回答 5

46

你可以像这样在Swift中定义一个通用的插座集合:

@IBOutlet var collectionOfViews: Array<UIView>? // = [UIView]?

或例如UIButton对象:

@IBOutlet var collectionOfButtons: Array<UIButton>? // = [UIButton]?

您可以像通常在File's Owner中一样在Outlet Collections组下找到您的收藏:

奥特莱斯系列

连接 5 个随机按钮后,它会在我的控制台上显示:

将 UIButton 实例连接到 Collection

于 2014-07-17T13:45:19.037 回答
32

按照以下步骤创建一个插座阵列并将其与 IB Elements 连接:

  • 创建一个 IBOutlets 数组
  • 在 Storyboard ViewController 界面中添加多个 UIElement(视图)
  • 选择 ViewController(在故事板中)并打开连接检查器
  • 连接检查器中有“Outlet Collections”选项(您将在那里看到一系列插座)
  • 与您的界面元素连接

-

class ViewController2: UIViewController {


    @IBOutlet var collection:[UIView]!


    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

在此处输入图像描述

于 2017-10-16T10:03:00.257 回答
2

此处的解决方案Swift - IBOutletCollection 等效

@IBOutlet var objectCollection: [对象]

于 2014-07-17T13:44:14.487 回答
1

这是针对 macOS 的(应该与 iOS 类似),我在故事板中没有找到“Outlet Collections”(看起来他们取消了该选项)。所以我把我所有的按钮放在一个NSStackView并从故事板链接堆栈

@IBOutlet weak var buttons: NSStackView!

然后我遍历它们以进行相应的更改

for case let (index, button as NSButton) in buttons.arrangedSubviews.enumerated() {
            if(index + 1 != someButtonIndex) {button.state = .off}
            else {button.state = .on}
        }

你也可以使用tag而不是index

于 2021-08-05T17:12:55.290 回答
0

从两个视图窗格开始,您可以在其中看到代码和情节提要。当您第一次从 UI 连接到代码时,只需仔细查看 Connection 下拉字段并选择名为“Outlet Collection”的选项。这将自动创建一个 IBOutlets 数组。接下来只需在一个圆圈中查找小黑圈,该圆圈位于您的代码中创建数组的位置。只需从这个圈子拖动到您想要连接到同一集合的所有其他 UI 对象(不确定是否可以混合类型)。同样,您可以通过从创建的第一个黑点拖动到要连接到该操作的所有其他对象,将所有对象连接到一个操作。还可以考虑使用 EnumerateSequence() 来帮助使用此集合。甜蜜对吧?

于 2015-12-27T17:50:53.000 回答