2014-01-25 3 views
0

У меня есть два UIViewControllers. Я использую modal segue для второго, когда возвращаюсь, я использую dismissViewControllerAnimated. Я хочу запустить метод, когда вернусь к первому. Как я могу это сделать?Как поймать, когда UIViewController отображает после отклонения ViewControllerAnimated

Я попытался запустить специальное уведомление перед dismissViewControllerAnimated и поймать его в первом UIViewController, но он ничего не поймает, потому что он все еще находится на втором, когда он уволен.

+0

Таким образом, вы не хотите, чтобы показать первый контроллер представления снова? –

+0

Конечно, я хочу снова показать первый контроллер представления, но когда он показывает, я хочу запустить метод в этом первом контроллере представления, поэтому мне нужно что-то вроде UIApplicationDidBecomeActiveNotification, но для возврата из модального сегмента. –

ответ

1

Есть простые варианты, которые я вижу.

Используйте метод viewDidDisappear: в виду, которое вы отклоняете.

dismissViewControllerAnimated:completion: метод принимает блок, который фактически выполняется после того, как viewDidDisappear выполняет в увольнении.


Чтобы передать ссылку из одного контроллера представления к следующему:

В .h файле второго вида контроллера, добавить свойство:

@property (nonatomic,strong) FirstViewController *firstVC; 

В своем первом контроллере представления, добавьте следующий метод:

- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender { 
    if([@"segue_YOUR_SEGUE_NAME" isEqualToString:[segue identifier]]) { 
     if([[segue destinationViewController] isKindOfClass: 
      [SecondViewController class]]) { 

      SecondViewController *dest = (SecondViewController*)[segue 
       destinationViewController]; 
      dest.firstVC = self; 
     } 
    } 
} 

Теперь, на вашем втором контроллере, лет и может сделать две вещи, как я уже говорил:

[self dismissViewControllerAnimated:YES 
         completion:^{ 
          [self.firstVC someMethod]; 
         }]; 

ИЛИ ...

- (void)viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated]; 
    [self.firstVC someMethod]; 
} 
+0

Дело в том, что я хочу, чтобы этот метод выполнялся в первом UIViewController, а не во втором. –

+0

Итак, первый контроллер представления передает ссылку на второй контроллер представления, когда он представляет его? – nhgrif

+0

Я не уверен, понимаем ли мы друг друга или, может быть, я задал неправильный вопрос. Первый UIViewController загружается, я нажимаю кнопку, используя modal segue. Появляется второй UIViewController, я нажимаю кнопку на втором, и он скрывается. Когда он скрывается, и первый появляется снова, я хочу что-то изменить в этом первом UIViewController, используя метод, который я хочу запустить прямо в момент его появления. Почему бы мне затем передать ссылку на Вторую, если я не хочу менять какую-либо информацию между этими двумя. Или, может быть, я не понимаю, что вы имеете в виду, передав ссылку на второй контроллер. –

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