​Unwind​ S​egue​

Unwind​ segue​ — это segue (переход), который в процессе этого самого перехода не создает новый MVC. Т.е. переход осуществляется в контроллер, который явно или косвенно презентует (presented) текущий контроллер. Примером этому могут быть например  UINavigationController. Все контроллеры в нем можно представить как стек карт, и принято, что в этом контроллере каждая карта презентует (presented) следующую. Соответсвенно мы можем перейти от карты с номер 7 к карте с номером например 3. Или 2…

Другой пример — это контроллер, который представлен модально — т.е. на весь экран и вся работа приложения ограничена именно этим контроллером. После презентации такого контроллера скорее всего понадобится передать определенную информацию в контроллер, который модально презентовал. Можно использовать делегирование, однако  ​Unwind​ s​egue​ в несколько раз проще.

На практике это выгляди так:

  1. Нужно в контроллере, в который нужно выполнить ​Unwind​ переход создать метод, помеченный ​@IBAction и он должен иметь единственный аргумент типа U​IStoryboardSegue.
  2. В Storyboard выполнить ctrl-перетягивание на значок Exit вверху контроллера
  3. Если метод из п.1 написан верно, то XCode предложит связать этот метод с Unwind переходом

unwindeSegue unwindSegue2

//
// proSwift.ru
//

@IBAction func unwindSegue(sender: UIStoryboardSegue) {
        
}

В итоге получается, что если этот переход возможен (т.е. он переходит к контроллеру, который прямо или косвенно его презентует), то выполняются все стандартные вещи, такие как

//
// proSwift.ru
//

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
   if let dvc = segue.destinationViewController as? SomeViewController {
   }
}

т.е. мы имеем доступ к destinationViewController и подготавливаем его для перехода. После подготовки и перехода выполняется метод unwindSegue:, в котором  sender представляет информации о том, какой контроллер в него перешел. Я думаю вы уже увидели, что в этом месте устанавливается связь между контроллерами, с помощью которой можно обмениваться информацией между ними.

Добавить комментарий

Ваш адрес email не будет опубликован.

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.