Если вы используете Eclipse, вы можете предупредить вас об этих утверждениях:
[/g0]
[/g0]
Вставить имя Segue для разматывания.
Затем - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
с идентификатором вашего сегмента.
Я использовал [self dismissViewControllerAnimated: YES completion: nil];
, который вернет вас к вызывающему ViewController
.
Ответ Вишала Чаудри выше работал для меня. Я также хотел бы добавить, что для ручного запуска сека, используя:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
из ViewController, вы также должны выбрать режим размотки под сценой ViewController в раскадровке и в представлении свойств на RHS убедитесь, что поле Indentifier содержит указатель, на который вы ссылаетесь в коде («mySegueName» в приведенном выше примере).
Если вы опустите этот шаг, строка, указанная выше, выдает исключение, не известно.
Обратное совместимое решение, которое будет работать для версий до ios6, для заинтересованных:
- (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated {
for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) {
UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i];
if ([vc isKindOfClass:vcClass]) {
[self.navigationController popToViewController:vc animated:animated];
return;
}
}
}
FYI: для ответа @ Вадима на работу с ручным развязным действием, вызванным из контроллера просмотра, вы должны поместить команду:
[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];
внутри метода класса класса overrideDidAppear, как это сделать :
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}
Если вы поместите его в другие методы ViewController, такие как viewDidLoad или viewWillAppear, он будет проигнорирован.
performSegueWithIdentfier
делает именно это: выполнение segue от одного ViewController к другому
– ezcoding
28 September 2016 в 12:36
bradleygriffith
был отличным. Я сделал шаг 10 и сделал снимок экрана для упрощения. Это скриншот в Xcode 6.
Просто управляйте перетаскиванием с оранжевого значка на красный значок выхода, чтобы создать размотку без каких-либо действий / кнопок в представлении.
[/g0]
Затем выберите unwind segue
и установите некоторый идентификатор для доступа к нему из кода.
[/g1]
В код,
[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
UIViewController
. Тогда ваше решение будет работать
– Alex Cio
16 October 2014 в 16:36
Вот полный ответ с Objective C и Swift:
1) Создайте IBAction
разматывать сеанс в контроллере представления адресата (где вы хотите переходить на). Anywhere в файле реализации.
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2) На контроллере представления источника (контроллер, из которого вы переходите), ^ + перетащите его из «Название активности», чтобы выйти. Вы должны увидеть разворот segue, созданный на шаге 1 во всплывающем окне. (Если вы этого не видите, просмотрите первый шаг). Выберите unindToContainerVC: из всплывающего окна или того, что вы назвали вашим методом, чтобы подключить ваш источник-контроллер к разматыванию IBAction.
[/g1]
3) Выберите сегмент в в документе документа контроллера исходного вида раскадровки (он будет указан внизу) и дать ему идентификатор.
[/g2]
4) Вызовите разматывание segue с помощью этого метода с помощью контроллера представления source , заменив ваше имя разматывания segue.
// Цель C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
// Swift
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
NB. Используйте свойство sourceViewController параметра segue метода разматывания для доступа к любым открытым свойствам на контроллере источника. Также обратите внимание, что структура обрабатывает отклонение исходного контроллера. Если вы хотите подтвердить это, добавьте метод dealloc к исходному контроллеру с сообщением журнала, которое должно срабатывать, как только оно было убито. Если dealloc не срабатывает, у вас может быть цикл сохранения.
(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
– xhg
9 February 2015 в 08:03
ctrl+drag
с ViewController
до Exit
была невероятно полезна. Благодаря!
– kbpontius
13 August 2015 в 23:26
Цитата из Технической заметки Apple по Unwind Segue: Чтобы добавить разворот, который будет запускаться только программным способом, выполните управление + перетащите значок значка с изображением сцены на значок выхода, затем выберите действие отмены для нового сеанса из всплывающее меню.