在使用Storyboard创建Xcode 6的应用程序时,无法连接插座集合。

7

我在Xcode 6中创建outlet collection时遇到了问题。在Xcode 6中,outlet collection现在作为常规的IBOutlets运行,您可以使用相同的@IBOutlet属性声明outlet collection,同时确保为类型指定一个数组。我已经在我的视图控制器的swift文件中完成了这个操作,例如:

@IBOutlet var cardButtons: UIButton[]

在 Xcode 5 中,当用户使用助手编辑器从故事板中的元素拖动控件到相应的视图控制器时,会出现创建输出口或输出口集合的选项。但在 Xcode 6 中似乎不再支持此功能,我猜测这是因为输出口和输出口集合现在共享相同的 @IBOutlet 属性。那么,如果我想创建一个包含10个按钮的输出口集合,而无法从故事板视图中控制拖动每个按钮并将其连接到我的输出口集合,该怎么办呢?
@IBOutlet var cardButtons: UIButton[] 

在我的Swift文件中,我如何定义控制器的属性?

4个回答

11
你说得对,你只需要更正式地定义这个数组:
@IBOutlet var cardButtons: Array<UIButton>

现在你将能够连接IB中的按钮。


上述方法应该有效,但在Xcode 6 beta 3中仍然无法正常工作。一种解决方法是使用NSArray,直到Xcode和Swift可以正确处理此问题:

class ViewController: UIViewController {
    @IBOutlet strong var labels: NSArray!

    override func viewDidLoad() {
        super.viewDidLoad()

        for label in self.labels as [UILabel] {
            label.textColor = UIColor.redColor()
        }
    }
}

2

以下是Xcode 6 beta已知问题:

"Interface Builder不支持在Swift类中声明outlet collections。(15607242)"

Nate Cook的答案适用于附加outlets,但不适用于outlet collections。希望在下一个Xcode 6 beta版本中解决此问题。


据称在Beta 4中已经修复。 - Chris Conover
在 Xcode 8 中,使用 Array<Type> 或 [Type] 都无法正常工作。使用 NSArray 可以让输出集合在 IB 中显示,但仍然无法连接到它。 - Aral Balkan

2
在Xcode 6的第三个版本中,以下语法是有效的:
@IBOutlet strong var cardButtons: NSArray?

请注意以下内容:
  • 你必须使用 strong,因为 @IBOutlet 默认是弱引用,而且由于数组不在界面中,它会在你有机会使用它之前消失。

  • 你必须使用 NSArray,因为你不能将 Array 标记为 strong。

当然,现在由你来确定包含的类型。

还要注意,这不是文档或 Xcode 自己在控制拖动形成输出集合时宣传的语法。我无能为力;使用该语法会导致 seg 错误,因此显然需要其他东西,至少目前是这样。


0

很奇怪,我用Swift做了IBOutlet,一开始它能正常工作,但后来发现它停止工作了,发现在最新的Xcode beta版本中有些东西被破坏了,导致它无法正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接