7

我在 Xcode 6 中创建插座集合时遇到问题。Xcode 6 中的插座集合现在可以作为常规 IBOutlet 使用,并且您使用相同的 @IBOutlet 属性来声明插座集合,同时确保为该类型指定一个数组。我已经在我的视图控制器的 swift 文件中完成了这个,即

@IBOutlet var cardButtons: UIButton[]

在 Xcode 5 中,当一个控件使用辅助编辑器从情节提要中的一个元素拖动到相应的视图控制器时,他们会看到一个选项来创建插座或插座集合。这在 Xcode 6 中似乎不再可能,我的猜测是因为 outlets 和 outlet 集合现在共享相同的 @IBOutlet 属性。我应该如何创建一个包含 10 个按钮的插座集合,而无法控制从情节提要视图中拖动每个按钮并将其连接到我的

@IBOutlet var cardButtons: UIButton[] 

我的视图控制器快速文件中的属性?

4

4 回答 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()
        }
    }
}
于 2014-06-05T17:32:12.877 回答
2

这是 Xcode 6 beta 已知问题:“Interface Builder does not support declaring outlet collections in Swift classes. (15607242)”

Nate Cook 的回答对于附加网点是正确的,但对于网点集合则不然。希望在下一个 Xcode 6 beta 版本中,这个问题将得到解决。

于 2014-06-23T14:01:07.813 回答
2

在 Xcode 6 的种子 3 中,以下语法有效:

@IBOutlet strong var cardButtons: NSArray?

请注意以下事项:

  • 您必须使用strong,因为@IBOutlet 默认情况下很弱,并且由于该数组不在界面中,因此在您有机会使用它之前它就会消失。

  • 您必须使用 NSArray 因为您不能将 Array 标记为强。

当然,知道包含的类型现在取决于您。

另请注意,当您控制拖动以形成插座集合时,这不是文档或 Xcode 本身所宣传的语法。我无能为力;使用该语法会导致段错误,因此显然需要其他东西,至少现在是这样。

于 2014-07-10T21:27:26.033 回答
0

很奇怪,我用 swift 做了 IBOutlet 并且它工作了一段时间,只是意识到它停止工作并发现在最后一个版本的 xcode beta 中它不工作的地方出现了问题。

于 2014-07-05T18:52:50.997 回答