Xcode 4.5 Storyboard 'Exit'

Я только что установил Xcode 4.5 для поддержки iOS6, и я увидел новый значок под названием "Выход" в моей раскадровке, указанный под моими диспетчерами просмотра вместе с "Первым ответчиком" и т.д. Маленький зеленый значок с надписью "Выход".

Я могу найти что-нибудь на нем и не выработать, как его можно использовать.

Кто-нибудь знает что-нибудь об этом, как он работает, для чего он нужен?

Ответ 1

Это называется " Unwind Segue". К сожалению, до сих пор нет документации для этого, кроме краткого упоминания о новом списке функций XCode 4.5, который гласит:

Развяжите сегменты можно переходить к существующим экземплярам сцен в раскадровке

Хорошей новостью является то, что есть сессия из WWDC 2012, объясняющая этих существ (между прочим).

Вы можете просто войти в Apple iOS Dev Center с подробными сведениями о своей учетной записи разработчика, а затем перейти на страницу WWDC 2012 и посмотреть "Принятие раскадровки в вашем приложении" ( он пятый от вершины). Обсуждение разматывания начинается в 37:20.


Update: Вот еще информация по этому вопросу из документации Apple

Объект-заполнитель с именем Exit для секций размотки. По умолчанию, когда пользователь отклоняет дочернюю сцену, контроллер просмотра для этой сцены разматывает (или возвращает) родительскую сцену - это сцена, которая первоначально перешел на детскую сцену. Однако объект Exit позволяет диспетчеру просмотра отключиться от произвольной сцены.

(Из iOS6 docset > Общие > Начало работы)

И вот хороший пример того, как вы можете реализовать один из них


Другое обновление:

Вот техническая заметка от Apple относительно этой темы.

Ответ 2

Представьте, что у вас есть последовательность просмотров в вашем раскадровке:

A -> ... -> Z

Вы хотите иметь кнопку в виде Z, которая позволяет пользователю полностью вернуться к A.

Итак, вам нужно предоставить представление, в котором вы хотите вернуться, в этом случае A, метод экземпляра, помеченный как IBAction, и принимает один параметр тип UIStoryboardSegue *. Имя метода и переменной не имеет значения. То, что вы делаете в рамках реализации, не имеет значения. Вот пример:

Obj-C:
В интерфейсе A (не Z):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;

В A Реализация (не Z):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Swift:
В A источнике (не Z):

@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Теперь, в вашем раскадровке, control перетащите элемент из Z (IE, кнопка отмены) в Z Exit. Он будет проверять все представления выше в иерархии представлений, у которых есть IBAction, который принимает только один UIStoryboardSegue * как действие и перечисляет их для вас.

Надеюсь, это было более прямолинейно и полезно, чем существующие ответы. Я обнаружил, что эта ссылка была особенно полезна, поэтому, если у вас есть детали, которые вы все еще не поняли после прочтения моего ответа, возможно, это может вам помочь (я попытался просто сконденсировать всю полезную информацию из этой длинной статьи в короткий ответ): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html

Ответ 3

См. также Невозможно подключить раскадровку Unwind Segue, в которой уточняются требования по оживлению иконки Exit. Вы должны иметь выше в иерархии диспетчера представлений метод, который:

  • Отмечено как IBAction

  • Принимает один параметр, который является UIStoryboardSegue *

Если оба этих условия выполнены, значок Exit увидит его и позволит вам подключиться к нему путем перетаскивания с помощью кнопки в том же контроллере представления.

Я также опубликовал здесь самый простой пример:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (исправлено 12 июля 2013 г.)

Это показывает, насколько просто сделать это сейчас, чтобы перейти к представленному контроллеру представления и обратно, в отличие от всей работы, которую вы делали ранее, чтобы передавать информацию назад и вперед (материал в шаблоне с делегатом и протокол, все из которых теперь можно удалить).

Ответ 4

Просто добавьте небольшую тонкость в определение требований, которое может помочь. Это основано на эксперименте в Xcode 4.6. Я обнаружил, что это специально и только декларирование (!) Метода, которое позволяет получить требуемый ответ от управляющего сопротивления от Xcode. Вот что я нашел в полной мере:

  • Отмечено как IBAction
  • Принимает один параметр UIStoryboardSegue *
  • У вас должно быть объявлено действие (но не обязательно реализовано [означает метод в разделе реализации .M]).
  • Он может быть в любом объявлении интерфейса класса, даже в разделе интерфейса .M, за исключением класса appdelegate. (Я не вижу зависимости от его позиции в иерархии контроллера. Вы можете добавить любой старый файл, и система, похоже, объединяет все методы, которые имеют параметр UIStoryboardSegue, и отображает их в меню значка выхода.) Обратите внимание, что меню управления перетаскиванием даже покажет вам ваш метод, если метод находится в классе сцены, которую вы манипулируете в редакторе раскадровки, но он появится без двоеточия и, похоже, не вызывает никаких действий во время выполнения.

Пример: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;