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. Вы должны иметь выше в иерархии диспетчера представлений метод, который:
Если оба этих условия выполнены, значок 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;