Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Storyboards & Segues

CocoaHeads
April 02, 2018
66

Storyboards & Segues

Речь пойдет об одной из самых недооцененных технологий в iOS. Постараемся понять, что такое Storyboard и Segue, и почему они так называются. Разберемся в том, что такое роутинг в приложении с точки зрения UIKit, и какую роль в этом играет внедрение зависимостей.

CocoaHeads

April 02, 2018
Tweet

More Decks by CocoaHeads

Transcript

  1. Антон Сергеев CocoaHeads Moscow История Storyboards 8 ▪ Впервые появились

    в iOS 5.0 с очень ограниченным функционалом
  2. Антон Сергеев CocoaHeads Moscow История Storyboards 8 ▪ Впервые появились

    в iOS 5.0 с очень ограниченным функционалом ▪ В iOS 6.0 добавилась "перемотка"
  3. Антон Сергеев CocoaHeads Moscow История Storyboards 8 ▪ Впервые появились

    в iOS 5.0 с очень ограниченным функционалом ▪ В iOS 6.0 добавилась "перемотка" ▪ К iOS 9.0 обновился интерфейс, появилась поддержка статических контейнеров
  4. Антон Сергеев CocoaHeads Moscow История Storyboards 8 ▪ Впервые появились

    в iOS 5.0 с очень ограниченным функционалом ▪ В iOS 6.0 добавилась "перемотка" ▪ К iOS 9.0 обновился интерфейс, появилась поддержка статических контейнеров ▪ В macOS с версии 10.10, хотя кому это сегодня интересно...
  5. Антон Сергеев CocoaHeads Moscow Фабричный шаблон 16 ▪ Методы возвращают

    экземпляры, удовлетворяющие контракту ▪ В экземпляры внедрены все зависимости
  6. Антон Сергеев CocoaHeads Moscow Зависимости UIViewController 24 ▪ IBOutlet -

    сервисы, делегаты, хелперы и т.д. ▪ IBInspectable - "константы"
  7. Антон Сергеев CocoaHeads Moscow Зависимости UIViewController 24 ▪ IBOutlet -

    сервисы, делегаты, хелперы и т.д. ▪ IBInspectable - "константы" ▪ Иерархия UIView
  8. Антон Сергеев CocoaHeads Moscow Зависимости UIViewController 24 ▪ IBOutlet -

    сервисы, делегаты, хелперы и т.д. ▪ IBInspectable - "константы" ▪ Иерархия UIView ▪ Иерархия UIViewController
  9. Антон Сергеев CocoaHeads Moscow Представления 26 ▪ Модальные ▪ present(_:animated:completion:)

    ▪ dismiss(animated:completion:) ▪ Дочерние ▪ show(_:sender:) ▪ showDetailViewController(_:sender:) ▪ unwind(for:towardsViewController:)
  10. Антон Сергеев CocoaHeads Moscow Проблемы внедрения 32 ▪ Подход UIView

    не работает с UIViewController ▪ Динамическая зависимость
  11. Антон Сергеев CocoaHeads Moscow Проблемы внедрения 32 ▪ Подход UIView

    не работает с UIViewController ▪ Динамическая зависимость ▪ Пользователь
  12. Антон Сергеев CocoaHeads Moscow 32 ▪ Подход UIView не работает

    с UIViewController ▪ Динамическая зависимость ▪ Пользователь Сложности внедрения
  13. Антон Сергеев CocoaHeads Moscow Механизм Segue 33 ▪ Управление модификацией

    иерархии контроллеров ▪ Только контроллеры могут модифицировать иерархию
  14. Антон Сергеев CocoaHeads Moscow Механизм Segue 33 ▪ Управление модификацией

    иерархии контроллеров ▪ Только контроллеры могут модифицировать иерархию ▪ Контроллеры отвечают только за дочерние
  15. Антон Сергеев CocoaHeads Moscow Механизм Segue 33 ▪ Управление модификацией

    иерархии контроллеров ▪ Только контроллеры могут модифицировать иерархию ▪ Контроллеры отвечают только за дочерние ▪ Контроллеры должны оставаться независимыми друг от друга
  16. Антон Сергеев CocoaHeads Moscow prepare(for:sender:) 36 ▪ "Есть большая вероятность,

    что на этом твое взаимодействие с пользователем закончится, приготовься."
  17. Антон Сергеев CocoaHeads Moscow prepare(for:sender:) 36 ▪ "Есть большая вероятность,

    что на этом твое взаимодействие с пользователем закончится, приготовься." ▪ Завершение редактирования
  18. Антон Сергеев CocoaHeads Moscow prepare(for:sender:) 36 ▪ "Есть большая вероятность,

    что на этом твое взаимодействие с пользователем закончится, приготовься." ▪ Завершение редактирования ▪ Настройка анимаций
  19. Антон Сергеев CocoaHeads Moscow prepare(for:sender:) 36 ▪ "Есть большая вероятность,

    что на этом твое взаимодействие с пользователем закончится, приготовься." ▪ Завершение редактирования ▪ Настройка анимаций ▪ Уведомление бизнес-слоя (сохранение данных и т.п.)
  20. Антон Сергеев CocoaHeads Moscow Минусы 45 ▪ Решаемые ▪ Нет

    поддержки кастомных контейнеров ▪ Строки ▪ Ассеты поддерживают мало типов ▪ IBInspectable поддерживают мало типов
  21. Антон Сергеев CocoaHeads Moscow Минусы 45 ▪ Решаемые ▪ Нет

    поддержки кастомных контейнеров ▪ Строки ▪ Ассеты поддерживают мало типов ▪ IBInspectable поддерживают мало типов ▪ Не решаемые ▪ NSObject & Objective-C