Unwind Segue
Unwind segue — это segue (переход), который в процессе этого самого перехода не создает новый MVC. Т.е. переход осуществляется в контроллер, который явно или косвенно презентует (presented) текущий контроллер. Примером этому могут быть например UINavigationController. Все контроллеры в нем можно представить как стек карт, и принято, что в этом контроллере каждая карта презентует (presented) следующую. Соответсвенно мы можем перейти от карты с номер 7 к карте с номером например 3. Или 2…
Другой пример — это контроллер, который представлен модально — т.е. на весь экран и вся работа приложения ограничена именно этим контроллером. После презентации такого контроллера скорее всего понадобится передать определенную информацию в контроллер, который модально презентовал. Можно использовать делегирование, однако Unwind segue в несколько раз проще.
На практике это выгляди так:
- Нужно в контроллере, в который нужно выполнить Unwind переход создать метод, помеченный @IBAction и он должен иметь единственный аргумент типа UIStoryboardSegue.
- В Storyboard выполнить ctrl-перетягивание на значок Exit вверху контроллера
- Если метод из п.1 написан верно, то XCode предложит связать этот метод с Unwind переходом
// // 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 представляет информации о том, какой контроллер в него перешел. Я думаю вы уже увидели, что в этом месте устанавливается связь между контроллерами, с помощью которой можно обмениваться информацией между ними.
Добавить комментарий