Раскадровка Xcode 4.5 Exit

102

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

Я ничего не могу найти на нем и понять, как его можно использовать.

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

Джош Кахане
источник
1
На аналогичный вопрос я опубликовал этот ответ: stackoverflow.com/questions/12569316/… Это помогает объяснить, как использовать функцию выхода (разворачивания)
Эрик

Ответы:

72

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

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

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

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


Обновление: вот дополнительная информация по этому вопросу из документации Apple.

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

(Из документации iOS6> Общие> Начало работы)

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


Еще одно обновление:

Вот техническое примечание от Apple по этой теме.

Алладинский
источник
3
Хорошо, так как вы это используете? Пытался щелкнуть кнопкой мыши по объекту выхода в нижней части контроллера представления, но он ни на что не ссылался.
регулировочная шайба
4
По сути, вам нужно определить метод для вашего перехода по размотке, а затем подключиться от элемента к exitкнопке, выбрав метод, который вы хотите вызвать. Вы можете найти здесь пример (я также обновил свой ответ, включив в него пример)
Alladinian
1
-1: много слов, мало полезной информации. Прочитав это и применив его в своем приложении, я написал следующий ответ, который, надеюсь, будет более полезным: stackoverflow.com/a/25829835/901641
ArtOfWarfare
1
Вот почему я люблю несуществующие документы Apple. Блин, кого-нибудь там должны уволить.
Дак
@SpaceDog Может быть, именно это и произошло, все они были уволены, и некому писать документацию: / Тем не менее, мне нравится видео WWDC - 2012 год, очевидно, был годом, когда Apple достигла своего пика.
проверено turing
10

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

A -> ... -> Z

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

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

Obj-C: Интерфейс
In 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's источник (не Z' s):

@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

Искусство Войны
источник
4

См. Также Cannot Connect Storyboard Unwind Segue, в котором разъясняются требования для оживления значка выхода. У вас должен быть выше в иерархии контроллеров представления метод, который:

  1. Помечено как IBAction

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

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

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

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

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

матовый
источник
3

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

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

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

Джек Беллис
источник