2015-10-06 2 views
0

Я пытаюсь инициализировать подкласс UIViewController под названием TestController. У меня есть этот быстрый класс:Инициализатор удобства для подкласса UIViewController с экземпляром из nib?

class TestController : UIViewController { 

    let testString : String 
    @IBOutlet weak var test: UITextField! 

    required init(withString string: String) { 

     self.testString = string 
     super.init(nibName: nil, bundle: nil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

}

У меня также есть файл под названием острия TestController, enter image description here

внутри него является экземпляром UIViewController. Владелец файла - нет (NSObject в сером цвете), а класс экземпляра UIViewController в дизайнере устанавливается в инспекторе идентификации TestController. В качестве выхода есть экземпляр UITextField.

enter image description here

Проблема в том, контроллер не инициализирован от кончика пера (я думаю), а выход TextField равен нулю.

Моя цель - разрешить инициализацию экземпляра контроллера программным путем посредством специализированного инициализатора. Что я делаю не так?

ответ

0

У вас есть две проблемы: во-первых, ваш ниб (или xib) создан неправильно (вы не должны видеть TestController в построителе интерфейса). Самый простой способ исправить это, чтобы воссоздать его: Новый Файл-> Cocoa Touch class-> Создать подклассом UIViewController, и не забудьте проверить Also Create a XIB file

Вторая проблема заключается в том, что вы не уточняя, что nib вы хотите загрузить. Вы должны указать в nibName параметра инициализаторе:

super.init(nibName: "NewlyCreatedXib", bundle: nil) 

Когда вы исправить обе проблемы, я считаю, что ваш код будет работать должным образом.