У меня возникли проблемы с подключением кнопок после загрузки настраиваемой клавиатуры представления ввода. Мои основные экраны - это раскадровка, а мой пользовательский вид - xib.
Представление ввода - это перо с владельцем файла, указывающим на его быстрый класс. Я загружаю представление ввода с кодом в другом контроллере представления, используя:
extension UIView {
class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> UIView? {
return UINib(
nibName: nibNamed,
bundle: bundle
).instantiateWithOwner(nil, options: nil)[0] as? UIView
}
}
Внутри контроллера основного представления я создаю представление ввода с помощью:
var myInputView = UIView.loadFromNibNamed("keypadInputViewController", bundle: nil)
keypadInputViewController - это базовое имя xib и его файла swift, а также имя класса в файле swift.
Я прикрепляю эту клавиатуру с помощью:
self.widthBox.inputView = self.myInputView
Затем открывается представление клавиатуры, как открывается обычная клавиатура iOS.
Проблема в том, что как только я добавляю соединители для кнопок из keypadInputViewController xib в его swift, я получаю сообщение о сбое. Сообщение конкретно ссылается на любые созданные мной связи. "этот класс не соответствует кодированию ключевого значения для ключа"
Xib содержит представление с дюжиной кнопок.
Я дважды проверил ряд пунктов, включая:
- Владелец файла установлен на keypadInputViewController
- запустился в Xcode
- сбросил в симуляторе iOS
- вручную удаленные производные файлы в библиотеке
- удалена ссылка и повторно добавлен файл xib и swift в проект
- удалил все соединения из xib в swift как в разделах владельца файла, так и в разделе просмотра
- закрыл и снова открыл Xcode
- пробовал бета 4 для Xcode 6.2
- Я открыл xcode и создал тестовый проект ios, добавил класс касания какао и использовал флажок создания xib. Тестовый проект терпит неудачу с той же ошибкой, как только я добавляю кнопки.
После довольно долгих поисков я обнаружил, что если не установить для владельца значение self, то кнопки не будут работать. Поэтому я изменил расширение на:
extension UIView {
class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> UIView? {
return UINib(
nibName: nibNamed,
bundle: bundle
).instantiateWithOwner(self, options: nil)[0] as? UIView
}}
Я все еще не могу установить представление для владельца файла. Приложение вылетает при компиляции, если розетка подключена, или при нажатии кнопки, если подключено действие, с ошибкой «неопознанный селектор отправлен в класс».
Я не знаю, это я или Xcode. Как мне заставить это представление клавиатуры принимать соединения, чтобы я мог двигаться дальше? Я думаю, что, возможно, я не добавил что-то важное в определения классов или неправильно загружаю этот xib. Идеи?