Используя раскадровку это очень просто. Вы просто перетащите действие на «Выход». Но как мне это назвать из моего кода?
Используя раскадровку это очень просто. Вы просто перетащите действие на «Выход». Но как мне это назвать из моего кода?
Ответы:
Введите имя Segue, чтобы расслабиться.
Тогда - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender.
с твоим переходом отождествляйся.
Вот полный ответ с Objective C и Swift:
1) Создайте последовательность IBAction
раскрутки в контроллере представления назначения (где вы хотите перейти). В любом месте в файле реализации.
// Objective C
- (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue {
}
// Swift
@IBAction func unwindToContainerVC(segue: UIStoryboardSegue) {
}
2) На контроллере представления исходного кода (от контроллера, от которого вы переходите), drag + перетащите от «Имя действия» для выхода. Вы должны увидеть последовательность раскрутки, созданную на шаге 1 во всплывающем окне. (Если вы этого не видите, просмотрите первый шаг). Выберите unwindToContainerVC: из всплывающего окна, или как вы называете свой метод, чтобы подключить ваш контроллер источника к разматывать IBAction.
3) Выберите последовательность в наброске документа контроллера исходного представления раскадровки (он будет указан внизу) и присвойте ему идентификатор .
4) Вызовите раскрутку, используя этот метод из источника. контроллера представления , подставив ваше имя .
// Цель C
[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];
// Swift
self.performSegueWithIdentifier("unwindToContainerVC", sender: self)
NB. Используйте свойство sourceViewController параметра segue в методе unwind для доступа к любым открытым свойствам в контроллере источника. Также обратите внимание, что фреймворк обрабатывает отклонение контроллера источника. Если вы хотите подтвердить это, добавьте метод dealloc в контроллер источника с сообщением журнала, которое должно сработать после его уничтожения. Если Deloc не срабатывает, возможно, у вас есть цикл сохранения.
(IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue
ctrl+drag
от ViewController
до Exit
была невероятно полезной. Спасибо!
bradleygriffith
Ответ был великолепен. Я сделал шаг 10 и сделал скриншот для упрощения. Это скриншот в Xcode 6.
unwind segue
на боковой панели:[self performSegueWithIdentifier:@"unwindIdentifier" sender:self];
UIViewController
. Тогда ваше решение будет работать
Я использовал, [self dismissViewControllerAnimated: YES completion: nil];
который вернет вас к призванию ViewController
.
Цитирование текста из Технического примечания Apple по разделу «Перемотка». Чтобы добавить переход «раскручивать», который будет запускаться только программным способом, удерживая нажатой клавишу «Control» + перетащите значок контроллера вида сцены на значок его выхода, затем выберите действие для перемотки нового перехода из всплывающего меню.
Ответ Вишала Чодри выше работал для меня. Я также добавил бы, что для того, чтобы вручную запустить seque, используя:
[self performSegueWithIdentifier:@"mySegueName" sender:self];
из ViewController вы также должны выбрать переход откатки под сценой ViewController в раскадровке и в представлении свойств в RHS убедитесь, что поле Indentifier содержит имя, на которое вы ссылаетесь в коде («mySegueName» в примере выше). ).
Если вы пропустите этот шаг, строка выше выдаст исключение, что имя seque не известно.
Обратно совместимое решение, которое будет работать для версий, предшествующих 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;
}
}
}
SWIFT 4 :
1. Создайте действие @IBAction с segue внутри контроллера, который вы хотите развернуть :
@IBAction func unwindToVC(segue: UIStoryboardSegue) {
}
2. В раскадровке из контроллера, который вы хотите перейти (развернуть), нажмите Ctrl + drag от знака контроллера, чтобы выйти из знака и выбрать метод, который вы создали ранее:
3. Теперь вы можете заметить, что в структуре документа появилась новая строка с заголовком «Unwind segue ....». Теперь вам нужно нажать на эту строку и открыть инспектор атрибутов, чтобы установить идентификатор (в моем случае unwindSegueIdentifier ).
4. Вы почти закончили! Теперь вам нужно открыть контроллер представления, от которого вы хотите раскрутиться, и создать метод, который будет выполнять переход. Например, вы можете добавить кнопку, связать ее с кодом с помощью @IBAction , после этого внутри этого IBAction добавить метод perfromSegue (withIdentifier: sender :) :
@IBAction func unwindToSomeVCWithSegue(_ sender: UIButton) {
performSegue(withIdentifier: "unwindSegueIdentifier", sender: nil)
}
Так что это все, что вам нужно сделать!
Для тех, кто интересуется, как сделать это с VC, не настроенными через раскадровку (те, кто задают этот вопрос из поиска «программно» + «раскрутить переход»).
Учитывая то, что вы не можете настроить процесс раскрутки программно, самое простое исключительно программное решение - это вызвать:
navigationController?.popToRootViewController(animated: true)
который вернет все контроллеры представления в стеке обратно в ваш корневой контроллер представления.
Чтобы извлечь только самый верхний контроллер представления из стека навигации, используйте:
navigationController?.popViewController(animated: true)
К вашему сведению: чтобы ответ @ Vadim работал с ручным действием обратной связи, вызываемым из View Controller, вы должны поместить команду:
[self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender];
внутри переопределенного метода класса viewDidAppear примерно так:
-(void) viewDidAppear:(BOOL) animated
{
[super viewDidAppear: animated];
[self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self];
}
Если вы поместите его в другие методы ViewController, такие как viewDidLoad или viewWillAppear, он будет проигнорирован.
performSegueWithIdentfier
делает именно это: выполнение перехода от одного ViewController к другому