2016-04-26 4 views
0

У меня есть контроллер A, который имеет xib в раскадровке. Тогда я подкласс B от A.Swift view controller initializer issue

Прямо сейчас я хочу представить контроллер представления о В.

Если я что-то вроде

self.presentViewaController(B.init(), animated: true) 

Это на самом деле работает, но не загружая XIB. Приложение выйдет из строя, сказав, что collectionView равен нулю. Скажем XIB имеет CollectionView, а в классе А:

class A: UIViewController { 
    @IBOutlet weak var collectionView: UICollectionView! 
} 

class B: A { 
    //Should be empty right? since it inherits from A, 
    // but the collectionView from super class is not initialized. 
} 

Как исправить эту проблему, так что, когда я создаю экземпляр B, я могу иметь CollectionView инициализируется?

ответ

1

Вы должны создать экземпляр и хранить ссылку на ViewController так:

var viewController = someViewController(nibName: "SomeViewController", bundle: nil) 

Затем представить следующим образом:

self.presentViewController(viewController, animated: true) 

Вы можете, конечно, просто настоящее, как это, но это отвратительный ,

self.presentViewController(someViewController(nibName: "SomeViewController", bundle: nil), animated: true) 

Вы можете или не может потребоваться отслеживать ViewControllers но это приведет к гибкости вниз линии.

Кроме того, вы должны проверить парадигму шаблона делегата, важно, чтобы тот же ViewController, который представляет дочерний ViewController, также отклоняет дочерний элемент. Вместо альтернативы, где ребенок «сам разрушает».

+0

Я пробовал. В нем говорится: «Загрузился« XXViewController », но розетка не была установлена». Не знаю, почему это так строго в Свифт. Есть идеи? – BabyShung

+0

Поскольку подкласс не имеет xib, является ли причина выхода не установленной? – BabyShung

+0

@BabyShung убедитесь, что розетки установлены правильно, в частности, вид. – Woodstock

Смежные вопросы