Не могу подключить коллекцию розеток в Xcode 6, используя раскадровку
У меня возникают проблемы при создании коллекции розеток в Xcode 6. Коллекции розеток в Xcode 6 теперь функционируют как обычные IBOutlets, и вы используете тот же атрибут @IBOutlet для объявления коллекции розеток, при этом обязательно указав массив для типа. Я сделал это в swift файле моего контроллера, т.е.
@IBOutlet var cardButtons: UIButton[]
В Xcode 5, когда один элемент управления перетаскивает элемент в раскадровке на соответствующий контроллер представления с помощью помощника редактора, им предоставляется возможность создать либо розетку, либо коллекцию розеток. Кажется, это больше невозможно в Xcode 6, и я предполагаю, что теперь розетки и коллекция розеток имеют один и тот же атрибут @IBOutlet. Как мне создать коллекцию розеток, которая будет содержать, скажем, 10 кнопок, без возможности управления перетаскиванием каждой из панелей раскадровки и подключением к моей
@IBOutlet var cardButtons: UIButton[]
свойство в моем представлении контроллера swift файла?
4 ответа
Вы правильно поняли, вам просто нужно определить массив более формально:
@IBOutlet var cardButtons: Array<UIButton>
Теперь вы сможете подключать кнопки от IB.
Выше должно работать, но все еще не в Xcode 6 бета 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()
}
}
}
В семени 3 Xcode 6 работает следующий синтаксис:
@IBOutlet strong var cardButtons: NSArray?
Обратите внимание на следующее:
Вы должны использовать
strong
потому что @IBOutlet по умолчанию является слабым, и поскольку массив не находится в интерфейсе, он исчезнет, прежде чем у вас появится возможность его использовать.Вы должны использовать NSArray, потому что вы не можете пометить Array как сильный.
Знание содержимого типа теперь, конечно, зависит от вас.
Также обратите внимание, что это не синтаксис, объявленный документами или самим Xcode, когда вы перетаскиваете их, чтобы сформировать коллекцию розеток. Я не могу с этим поделать; использование этого синтаксиса вызывает ошибку сегмента, поэтому явно требуется что-то еще, по крайней мере, на данный момент.
Это относится к бета-версии Xcode 6: "Interface Builder не поддерживает объявление коллекций розеток в классах Swift. (15607242)"
Ответ Нейта Кука верен для прикрепления розеток, но не для розеток. Надеемся, что в следующей бета-версии Xcode 6 эта проблема будет решена.
Странно, я сделал IBOutlet с помощью swift, и он какое-то время работает. Просто осознайте, что он перестал работать, и узнайте, что что-то сломалось в последней версии бета-версии xcode, где она не работает.