2016-11-04 5 views
0

У меня есть UIViewController, который создается из файла xib.viewDidLoad и ViewDidAppear не вызываются

Я инициализируюсь так:

_sharedSingleton = [[SlipChangesViewController alloc] init]; 
      [[NSBundle mainBundle] loadNibNamed:@"SlipChangesViewController" owner:_sharedSingleton options:nil]; 

добавить мнение, что UIViewController к подвиду в другом UIViewController:

[self.view addSubview:slipChangesVC.view]; 

Теперь странная вещь, вид успешно добавлен в subview, но почему-то и viewDidLoad и vieWillAppear не вызываются. Тем не менее, он успешно вызывает метод для создания общего одноэлементного метода и метода init.

Я проверил, чтобы убедиться:

  • Ни один из UIViews или UIViewControllers являются нулевыми
  • РОЗЕТКИ из XIb правильно связаны
  • Я зову [super viewDidLoad] и [super viewWillAppear]

У меня есть проверка различных потоков на stackOverflow и пробовал там предложения без успеха. например. Вызов [slipChangesVC view]

Кто-нибудь знает, почему эти 2 метода не будут называться?

+0

Возможно, посмотрите на это http://stackoverflow.com/a/32965187/2237587. Нижняя часть ответа – Simon

ответ

1

Вы добавляете вид SlipChangesViewController поверх существующего зрения. В этом случае viewDidLoad и viewWillAppear никогда не вызывались. Вы должны добавить ViewController для этого

попробовать это один

- (void)addChildViewC:(UIViewController *)childViewC 
{ 
    [self addChildViewController:childViewC]; 
    childViewC.view.frame = self.view.bounds; 
    [self.view addSubview:childViewC.view]; 
    [childViewC didMoveToParentViewController:self]; 
} 
1

Это неправильный способ добавления контроллера детского вида. Таким образом, владелец просмотра получает изменения. Просмотр отсоединен от контроллера своего вида, а контроллер просмотра перестает получать viewDidLoad и другие методы просмотра.

Если вы хотите, чтобы заставить его работать, пожалуйста, смотрите в уже ответил вопросом: add UIViewController in subview

0

Я никогда бы не сделать контроллер представления одноэлементно. Это не синглтон. Он создается, уничтожается, создается снова, снова уничтожается.

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

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