0

У меня есть UIViewController, который содержит кнопку. Когда я нажимаю кнопку, я добавляю контроллер детского просмотра, используя следующее.Как добавить и удалить UIViewControllers для других UIViewControllers

- (IBAction)loadEditScreen:(id)sender { 

self.editViewController = [[EditViewController alloc] init]; 

[self addChildViewController:self.editViewController]; 
[self.editViewController didMoveToParentViewController:self]; 

self.editViewController.view.alpha = 0; 
[self.editViewController.view setFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)]; 

[self.view addSubview:self.editViewController.view]; 

[self.editViewController setupImage:self.selectedImageView.image]; 

[UIView animateWithDuration:0.2 
         delay:0.0 
        options:0 
       animations:^{ 
        self.editViewController.view.alpha = 1; 

       } 
       completion:^(BOOL finished){}]; 

} 
- (void)closeEditScreen { 

[self.editViewController willMoveToParentViewController:nil]; 
[self.editViewController.view removeFromSuperview]; 
[self.editViewController removeFromParentViewController ]; 

} 

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

- (IBAction)closeEditScreen:(id)sender { 

HomeViewController *tmpController = [[HomeViewController alloc] init]; 
[tmpController closeEditScreen]; 

/*[UIView animateWithDuration:0.2 
         delay:0.0 
        options:0 
       animations:^{ 
        self.view.alpha = 0; 
       } 
       completion:^(BOOL finished){ 
        [self didMoveToParentViewController:nil]; 
        [self.view removeFromSuperview]; 
       }];*/ 

} 

Проблема заключается в том, что метод вызван, но ничего не происходит. Просмотр не удаляется, хотя я знаю, что этот метод работает, потому что я установил точки останова.

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

Спасибо заранее

+1

проверить SO сообщение http://stackoverflow.com/questions/13844432/container-uiviewcontroller-not-releasing-its-child-view-controllers – Jhaliya

ответ

1

В EditViewController closeEditScreen: (дочерний VC) вы создаете новый экземпляр HomeViewController (родительский VC) и вызываете на этот новый экземпляр. Это неправильно, вам не нужен новый экземпляр.

Вместо этого вы должны указать на экземпляр HomeViewController, который уже существует и создал вашего ребенка VC. Попробуйте это:

- (IBAction)closeEditScreen:(id)sender 
{ 
    // This is the instance of HomeViewController that you need 
    UIViewController* parentViewController = self.parentViewController; 
    // Cast the type so that you can invoke closeEditScreen without a compiler warning 
    HomeViewController* parentHomeViewController = (HomeViewController*)parentViewController; 
    [parentHomeViewController closeEditScreen]; 
} 

В то время как это вы должны получить правильный HomeViewController экземпляр для работы, я не уверен, является ли ваш подход, чтобы удалить ребенок VC не может иметь другие проблемы. Если вы столкнулись с большим количеством проблем, вам обязательно нужно прочитать руководство по программированию VC, упомянутое в ответе Cy-4AH.

+0

Спасибо! Это, похоже, решило проблему. Я думал, что это возможно из-за нового экземпляра, но не был уверен, как перезвонить в родительский контроллер представления. Еще раз спасибо. – ORStudios

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

  • Нет связанных вопросов^_^