Не удается подключить коллекцию outlet в Xcode 6 с помощью раскадровки

у меня возникли проблемы с созданием коллекции outlet в Xcode 6. Коллекции Outlet в Xcode 6 теперь функционируют как обычные IBOutlets, и вы используете тот же атрибут @IBOutlet для объявления коллекции outlet, не забывая при этом указывать массив для типа. Я сделал это в swift-файле контроллера моего вида, т. е.

@IBOutlet var cardButtons: UIButton[]

в Xcode 5, когда один элемент управления перетаскивается из элемента раскадровки в соответствующий контроллер вида с помощью помощника редактора, они представлены с возможностью создания либо розетки, либо коллекции розеток. Кажется, это больше невозможно в Xcode 6, и я предполагаю, что выходы и коллекция выходов теперь имеют один и тот же атрибут @IBOutlet. Как создать коллекцию outlet, которая будет содержать, скажем, 10 кнопок, не имея возможности управлять перетаскиванием каждого из них из раскадровки и подключить его к my

@IBOutlet var cardButtons: UIButton[] 

свойство в моем представлении контроллера swift файл?

4 ответов


вы правильно поняли, вам просто нужно определить массив более формально:

@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()
        }
    }
}

Это под известными проблемами Xcode 6 beta: "Interface Builder не поддерживает объявление коллекций outlet в классах Swift. (15607242)"

ответ Нейта Кука верен для присоединения розеток, но не коллекций розеток. Надеюсь, в следующей бета-версии Xcode 6 эта проблема будет решена.


в seed 3 Xcode 6 работает следующий синтаксис:

@IBOutlet strong var cardButtons: NSArray?

обратите внимание на следующее:

  • вы должны использовать strong потому что @IBOutlet слаб по умолчанию, и поскольку массив не находится в интерфейсе, он исчезнет, прежде чем вы сможете его использовать.

  • вы должны использовать NSArray, потому что вы не можете пометить массив как сильный.

зная, содержащихся тип сейчас до вас, курс.

обратите внимание также, что это не синтаксис, объявленный docs или самим Xcode, когда вы управляете перетаскиванием, чтобы сформировать коллекцию outlet. Я ничего не могу с этим поделать; использование этого синтаксиса вызывает ошибку seg, поэтому ясно, что нужно что-то еще, по крайней мере сейчас.


странно, я сделал IBOutlet с swift, и он работает какое-то время, просто поймите, что он перестает работать и что-то сломалось в последнем выпуске Xcode beta, где он не работает.