2013-06-20 5 views
1

Я пытаюсь передать данные обратно в контроллер исходного кода, выполнив размотку. Я нашел ответ для этого здесь: Unwind segue with Navigation back buttonUnwind segue from navigation back button

Я выполнил инструкции в первом ответе, но segue никогда не срабатывает.

В .h По мнению контроллера Источник:

- (IBAction)returnJ:(UIStoryboardSegue *)segue; 

Вот мой просмотреть исходный контроллер .m:

- (IBAction)returnJ:(UIStoryboardSegue *)segue 
{ 
    NSLog(@"Returned"); 
    if ([[segue identifier] isEqualToString:@"return Jobs"]) { 
     NSLog(@"Retuned"); 
     resSolarViewController *returnController = [segue sourceViewController]; 
     if (returnController.jobsList) { 
      self.jobs = returnController.jobsList; 
      [[self tableView] reloadData]; 
     } 
     [self dismissViewControllerAnimated:YES completion:NULL]; 
    } 
} 

Я уверен, что у меня есть все подключили правильно IB, но ни один из NSLogs никогда не отображается в консоли.

Что я делаю неправильно?

Спасибо.

ответ

1

Если данные передаются только на контроллер исходного кода, вы можете использовать делегат для его выполнения. How to pass prepareForSegue: an object

0

Я создал обычный UIButton и подключил его к выходу segue, который я хотел. Затем я сделал кнопку невидимой и переместил ее на X, Y координирует экран. Найдите segue в доке и инспекторе атрибутов для этого, дайте ему имя. Тогда в viewWillDisappear программно ссылаться на SEGUE по имени:

[self performSegueWithIdentifier:@"unwindFromSettings" sender:self]; 

Я делаю это для нормальных и размотать перетекает. Создание скрытой кнопки в качестве заставки GUI для сегмента, который я вызываю программно.

+0

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

1

@JosephGagliardo находится на правильном пути. Тем не менее, вы должны добавить тест, чтобы предотвратить срыв сеанса, когда он не возвращается к первому контроллеру представления. Что-то вроде этого в viewWillDisappear фактически позволит вам выполнить разматывание для кнопки «Назад». Вам не нужно действие segue из манекена (за пределами экрана). Просто создайте ручную размотку, перетаскивая ее из класса вниз до значка выхода. Обязательно укажите его после создания.

UIViewController *vc = self.navigationController.topViewController; 
if ([FirstViewController class] == [vc class]) 
{ 
    [self performSegueWithIdentifier:@"unwindSegue" sender:self]; 
}