2016-05-13 4 views
1

У меня есть 3 MVC и назовите их A, B, C здесь.Как выполнить функцию segue inside unwind

A - это главный MVC с кнопкой «Меню», подключенной к B с поп-сегментом.

A также подключен к C с ручным шоу segue.

B представляет собой popover MVC с кнопкой «Детализация», соединенной с A с размоткой segue.

C - подробная информация о MVC с подробной информацией.

Внутри размотки функция А. Я призываю performSegueWithIdentifier показать C.


Ожидаемое поведение является

  • Нажмите кнопку "Detail" в B
  • B исчезают и шоу вверх
  • C

Но запустил приложение, которое я получил.

  • Щелкните кнопку "Detail" в B
  • B исчезают и шоу до
  • C показать
  • C исчезают и шоу до

C появляются и исчезают внезапно, который не то, что я хочу.


Некоторые дополнительная информация

  • поповер B необходима для более кнопок.
  • A встроен в UINavigationController. Подключение A -> C, а не B -> C, для задней кнопки на верхней части C.

ответ

0

вы можете легко переключаться между viewControllers назначая раскадровки идентификатор к ним, используя ниже код ..

// you need to create UIStoryboard object by giving name of your storyboard 
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
// here you need to create storyboard ID of perticular view where you need to navigate your app 
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"viewContIdentifire"]; 

// if use presentViewController this will not enables you to go back to previous view 
[self presentViewController:vc animated:NO completion:nil]; 
        **// OR** 
// using pushViewController lets you to go back to the previous view 
[self.navigationController pushViewController:vc animated:YES]; 

Или все же вы хотите работать с segue, поэтому необходимо получить контроль над ними, выполнив его метод делегата ниже, чтобы они выполняли соответственно.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"segueName"]) { 
     // perform segue 
     [self performSegueWithIdentifier:@"SegueIdentifier" sender:self]; 
    } 
} 

счастливым кодирования .. :)

+0

Извините, до сих пор не знаю, как выполнить segue *** внутри функции размотки ***. – user1429171

+0

вы можете работать с идентификатором раскадровки, чтобы переключаться между представлениями, используя вышеприведенный раздел кода. – vaibhav

+0

И pushViewController, и функция executeSegueWithIdentifier внутри функции разматывания имеют одинаковый результат. Контроллер C появляется и исчезает внезапно ... – user1429171

4

Кажется функции раскручивать не правильное место, чтобы позвонить performSegueWithIdentifier.

UIKit будет контроллер поп-зрения после, вызывающий функцию размотки.

Таким образом, новый контроллер режима просмотра в режиме разматывания быстро появится.

Решение заключается в задержке выполнения функцииSithueWithIdentifier.

Решение 1: НЕ РАБОТАЕТ FINE

Добавления экземпляра Его и внутри viewDidAppear использовать этот экземпляр, чтобы определить, если мы выполняем SEGUE.

Не будет работать, если контроллер B является popover. После исчезновения B popover viewDidAppear не вызывается для контроллера A.

Решение 2: РАБОТА

Нажмите performSegueWithIdentifier в основную очередь.

@IBAction func unwind(segue : UIStoryboardSegue) { 
    dispatch_async(dispatch_get_main_queue()) { 
     self.performSegueWithIdentifier("SomeSegue", sender: self) 
    } 
} 
+0

отлично, это действительно помогло мне обновить мой ui, выполняя функцию segue in unwind – Shardon