2015-05-19 2 views
1

Я пытаюсь добавить контроллер навигации в подкласс UIViewController программно (я не использую раскадровки), и я хотел найти лучшее место для его инициализации и настройки.UINavigationController в UIViewController программно в классе

Я попытался viewDidLoad (мнения не были инициализированы init) и удобство init (просто чтобы убедиться) метод, но не повезло.

Вот как я создаю его:

override init!(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) { 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    let nav = UINavigationController(rootViewController: self) 
    } 

Что бы наиболее подходящий метод, чтобы поместить эту логику в? Я хотел бы сохранить эту логику, содержащуюся в этом VC.

Я могу выполнить это, создав навигатор. с корнем vc из представляющего VC, но это утечка этой логики, и я бы предпочел не делать этого.

ответ

0

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

class NextViewController: UIViewController { 

    var wantsNavigationcontroller = true 


    func viewControllerWithOrWithoutNavigationController() -> UIViewController { 
     if wantsNavigationcontroller { 
      let nav = UINavigationController(rootViewController: self) 
      return nav 
     }else{ 
      return self 
     } 
    } 
} 

Контроллер Предъявление сделает это,

@IBAction func PresentNextcontroller(sender: UIButton) { 
     var nextVC = NextViewController() 
     self.presentViewController(nextVC.viewControllerWithOrWithoutNavigationController(), animated: true, completion: nil) 
    } 
Смежные вопросы