Коротко
Розмотування переходу (іноді званий вихід Segue ) можна використовувати для переміщення вперед через поштовх, модальні або поповеров перетікає (як якщо б ви сунули навігаційний елемент з панелі навігації, закрили поповеров або відхилили модально представлений контролер уявлення). Крім того, ви можете реально розкручуватись не лише одним, а серією натискань / модальних / перехожих перешкод, наприклад, "повернення" декількома кроками у вашій ієрархії навігації одним дією розмотування.
Виконуючи розмотувальний мозок, вам потрібно вказати дію, яка є методом дії контролера перегляду, який ви хочете відкрутити.
Завдання-C:
- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue
{
}
Швидкий:
@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) {
}
Назва цього методу дії використовується, коли ви створюєте розмотаний мозок у таблиці розмов. Крім того, цей метод застосовується безпосередньо перед тим, як буде проведено розмотувальний розтин. Ви можете отримати контролер подання джерела від переданого UIStoryboardSegue
параметра для взаємодії з контролером подання, який ініціював segue (наприклад, для отримання значень властивостей контролера модального перегляду). У цьому відношенні метод має аналогічну функцію, як prepareForSegue:
метод UIViewController
.
Оновлення iOS 8: Розмотування зразків також працює з адаптивними групами iOS 8, такими як Show and Show Detail .
Приклад
Будемо мати табло з навігаційним контролером та трьома контролерами дитячого перегляду:
З Контролера зеленого перегляду ви можете розмотати (перейти назад) до контролера Red View. З синього ви можете розмотатися на зелений або червоний через зелений. Щоб увімкнути розмотування, слід додати спеціальні методи дій до червоного та зеленого, наприклад ось метод дії червоним:
Завдання-C:
@implementation RedViewController
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
}
@end
Швидкий:
@IBAction func unwindToRed(segue: UIStoryboardSegue) {
}
Після того, як метод дії буде додано, ви можете визначити розмотаний мозок на дошці розкадрування, перетягуючи його до значка «Вихід». Тут ми хочемо відмовитись від червоного від зеленого при натисканні кнопки:
Ви повинні вибрати дію, визначену в контролері перегляду, який ви хочете відмовити:
Ви також можете відмовитись від червоного від синього (який знаходиться в двох кроках у навігаційному стеку). Ключовим моментом є вибір правильної дії на розмотування.
Перед тим, як проводити розмотувальний розтин, називається метод дії. У прикладі я визначив, що розгортається червоний колір із Зеленого та Синього. Ми можемо отримати доступ до джерела розмотування в методі дії за допомогою параметра UIStoryboardSegue:
Завдання-C:
- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue
{
UIViewController* sourceViewController = unwindSegue.sourceViewController;
if ([sourceViewController isKindOfClass:[BlueViewController class]])
{
NSLog(@"Coming from BLUE!");
}
else if ([sourceViewController isKindOfClass:[GreenViewController class]])
{
NSLog(@"Coming from GREEN!");
}
}
Швидкий:
@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) {
if let blueViewController = unwindSegue.sourceViewController as? BlueViewController {
println("Coming from BLUE")
}
else if let redViewController = unwindSegue.sourceViewController as? RedViewController {
println("Coming from RED")
}
}
Розмотування також працює за допомогою комбінації натискань / модальних швів. Наприклад, якщо я додав ще один контролер жовтого виду з модальним швом, ми могли б відмовитися від Жовтого аж до Червоного за один крок:
Відмотування від кодексу
Коли ви визначаєте розмотуючий мозок, перетягуючи щось до символу Exit контролера перегляду, в конфігурації документа з'являється новий вираз:
Вибір сейфа та перехід до інспектора атрибутів виявляє властивість "Ідентифікатор". Використовуйте це, щоб надати унікальний ідентифікатор вашому модному каналу:
Після цього розгортання мозку може бути виконано з коду, як і будь-яке інше:
Завдання-C:
[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];
Швидкий:
performSegueWithIdentifier("UnwindToRedSegueID", sender: self)
dismissViewControllerAnimated:completion:
чиpopViewControllerAnimated:
досягати того самого?