我试图复制斯坦福Matchismo的游戏“为iphone和ipad开发ios7应用程序”( iTunesU in ITunesU in Swift )。
在第三节课幻灯片的第77页,它显示了使用IBOutletCollection,这在Swift上不是一个选项。Swift示例展示了一个具有IBOutlet数组的示例,但我不知道如何使Interface将多个端口连接到同一个IBOutlet/IBOutlet数组。
有人知道怎么做了吗?
我知道我可以创建12家分店,并以这种方式来处理,但我想让这个工作尽可能接近于讲演幻灯片中的例子。
发布于 2014-06-20 13:28:41
编辑
这是修正后的Beta版本的Swift -现在在IBCollection选项中的接口构建器。
用于早期Beta版本的Swift:
我遇到了同样的问题:在Beta 2的发布说明中,您可以找到以下声明:
接口生成器不支持在Swift类中声明出口集合
我以以下方式解决了这个问题(易于自定义):
class CardGameViewController: UIViewController {
@lazy var cardButtons : UIButton[] = {
var tempBtn: UIButton[] = []
for v:AnyObject in self.view.subviews {
if v is UIButton {
tempBtn.append(v as UIButton)
}
}
return tempBtn
}()
...基本上,它循环遍历所有子视图,并检查其中一个是否为UIButton。在这种情况下,它将被添加到临时数组中。然后使用这个临时数组来延迟实例化cardButtons数组。有关所有详细信息,请查看:Matchismo:目标-C到Swift
发布于 2014-06-05 17:34:31
更新: Xcode now中的更新-- "Outlet Collection“是Interface中的连接选项之一,它创建的内容如下:
@IBOutlet var labelCollection: [UILabel]!当我们等待修复时,您可以使用计算的属性来近似这个值。假设我的视图有五个UILabels,我想要在一个集合中。我仍然必须声明每一个,但随后我也声明了一个收集它们的计算属性:
class MyViewController {
@IBOutlet var label1 : UILabel
@IBOutlet var label2 : UILabel
@IBOutlet var label3 : UILabel
@IBOutlet var label4 : UILabel
@IBOutlet var label5 : UILabel
var labels: UILabel![] { return [label1, label2, label3, label4, label5] }有点烦人,但从那时起,我们可以将labels属性当作一个IBOutletCollection来处理,并且一旦修复了bug,就不必修改我们的其余代码了:
override func viewDidLoad() {
super.viewDidLoad()
for (index, item) in enumerate(self.labels) {
item.text = "Label #\(index)"
}
}发布于 2015-04-22 07:15:27
使用:
@IBOutlet var lineFields: [UITextField]!然后按照顺序从UITextField元素拖动到lineFields。
https://stackoverflow.com/questions/24052459
复制相似问题