SlideShare a Scribd company logo
1 of 35
Download to read offline
Storyboards
Segregation
Зачем?
Обычная storyboard
Обычная storyboard
• Тесная связанность всех экранов,
• Запутанность логики переходов прямо
пропорциональна количеству экранов,
• Невозможно работать совместно.
Решение
Метод банана
• В отдел покупается банан.
• Только разработчик, в руках
которого он находится,
может работать со
storyboard.
• Профит.
Решение получше
Раздельные storyboards
1. Выделяем из карты экранов общие user
stories.
2. Экстраполируем их на контроллеры
Main.storyboard.
3. Переносим эти группы в отдельные
storyboards.
Было
Стало
Несколько тезисов
• Группа экранов выделяется в отдельную
storyboard в двух случаях:
• Самостоятельная user story (Settings User
Story),
• Общая группа экранов для нескольких
storyboards (Photos User Story).
• Не нужно бояться маленьких storyboards.
Storyboard-to-
Storyboard
Программно
pushViewController:
pushViewController:
Segues
LinkedStoryboardSegue
Segue Identifier:
MSAPhotoGalleryViewController_Photos
LinkedStoryboardSegue
@interface MSALinkedStoryboardSegue : UIStoryboardSegue
+ (UIViewController *)sceneNamed:(NSString *)identifier;
@end
LinkedStoryboardSegue
UITabBarController
UITabBarController
- (UITabBarController *)tabBarController {
return [TyphoonDefinition withClass:[UITabBarController class]
configuration:^(TyphoonDefinition *definition) {
[definition injectProperty:@selector(viewControllers)
with:[self storyboardsInitialViewControllers]];
}];
}
- (NSArray *)storyboardsInitialViewControllers {
return @[
[[UIStoryboard storyboardWithName:MSABreedsStoryboardIdentifier
bundle:[NSBundle mainBundle]] instantiateInitialViewController],
[[UIStoryboard storyboardWithName:MSABestCatStoryboardIdentifier
bundle:[NSBundle mainBundle]] instantiateInitialViewController],
[[UIStoryboard storyboardWithName:MSASettingsStoryboardIdentifier
bundle:[NSBundle mainBundle]] instantiateInitialViewController]
];
}
Роутеры
Зачем?
• ViewController не должен знать о реализации
переходов между экранами.
• ViewController не должен конфигурировать
другие ViewController’ы.
Как?
@interface UIViewController (Routing)
@property (nonatomic, strong) id<MSARoutingProtocol> router;
@end
@protocol MSARoutingProtocol <NSObject>
- (instancetype)initWithNavigationController:(UINavigationController
*)navigationController;
- (void)dismissCurrentViewController:(UIViewController
*)viewController animated:(BOOL)animated;
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:
(id)sender;
@end
А пример?
@protocol MSABreedsRouter <MSARoutingProtocol>
- (void)showBreedViewControllerFromSourceController:
(UIViewController *)sourceController
withCatBreed:(MSACatBreed *)catBreed;
- (void)showPhotosViewControllerFromSourceController:
(UIViewController *)sourceController
withCatBreed:(MSACatBreed *)catBreed;
- (void)showWarningViewControllerFromSourceController:
(UIViewController *)sourceController;
@end
А передача данных?
1. В UIViewController+Routing:
prepareForSegue -> msa_prepareForSegue
2. И методы от Ильи:
- (void)performSegueWithIdentifier:(NSString *)identifier sender:
(id)sender userInfo:(NSDictionary *)userInfo;
- (NSDictionary *)segueUserInfo:(UIStoryboardSegue *)segue;
Полезные мелочи
Переиспользование
экранов
• Если экран входит сразу в несколько user
stories, можно реализовать его отдельно.
• Storyboard сама подтягивает нужный xib по
имени класса.
Переиспользование
экранов
Storyboard Constants
• Receiver (<MSAPhotoGalleryViewController: 0x8cbd540>)
has no segue with identifier ‘breedDetailSegue’
Storyboard Constants
• Receiver (<MSAPhotoGalleryViewController: 0x8cbd540>)
has no segue with identifier ‘breedDetailSegue’
:(
Storyboard Constants
generate_constants.py -> MSAStoryboardsIdentifiers.h
/* Segue identifier constants */
@class NSString;
extern NSString * const sBreedDetailSegue;
extern NSString * const sMSAPhotoGalleryViewController_Photos;
extern NSString * const sMSAPhotoViewController_Photos;
extern NSString * const sPhotoViewSegue;
extern NSString * const sWarningSegue;
Storyboard Constants
• В списке Build Phases скрипт генерации
констант должен быть на первом месте.
• Можно смело выпилить генерацию констант
для ID контроллеров и ячеек.
• Да и вообще, жить можно и без него.
User Stories как структура
• Иногда красиво
разбивать файлы
проекта получается по
User Stories:
Полезные ссылки
• Тестовое приложение: https://github.com/
igrekde/MultipleStoryboardsSample
• Reusing Views with Auto Layout: http://
cocoanuts.mobi/2014/03/26/reusable/
• Easier Multiple Storyboards: http://
spin.atomicobject.com/2014/03/06/multiple-ios-
storyboards/

More Related Content

Similar to Storyboard Segregation

David SLS 2
David SLS 2 David SLS 2
David SLS 2 3dphome
 
Интерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центровИнтерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центровАгентство AlterEGO
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексElena Voynova
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь ЧертенковImprove Group
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?buranLcme
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphicsSoftTechnics
 
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Ontico
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorDevGAMM Conference
 
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareКак сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareYandex
 
Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Denis Tsvettsih
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node jsAlex Tumanoff
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектахe-Legion
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Computer Science Club
 
Модульная архитектура Сбербанк Онлайн, Владимир Озеров и Александр Черушнико...
Модульная архитектура Сбербанк Онлайн, Владимир Озеров и Александр Черушнико...Модульная архитектура Сбербанк Онлайн, Владимир Озеров и Александр Черушнико...
Модульная архитектура Сбербанк Онлайн, Владимир Озеров и Александр Черушнико...Сбертех | SberTech
 
Вёрстка для мобильных телефонов
Вёрстка для мобильных телефоновВёрстка для мобильных телефонов
Вёрстка для мобильных телефоновtoWave.ru
 
Наталия Макишвили "Вёрстка для мобильных устройств"
Наталия Макишвили "Вёрстка для мобильных устройств"Наталия Макишвили "Вёрстка для мобильных устройств"
Наталия Макишвили "Вёрстка для мобильных устройств"Yandex
 
Moxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магииMoxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магииYuri Shmakov
 

Similar to Storyboard Segregation (20)

David SLS 2
David SLS 2 David SLS 2
David SLS 2
 
Интерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центровИнтерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центров
 
Всеволод Шмыров, Яндекс
Всеволод Шмыров, ЯндексВсеволод Шмыров, Яндекс
Всеволод Шмыров, Яндекс
 
JavaFX 2.0 overview
JavaFX 2.0 overviewJavaFX 2.0 overview
JavaFX 2.0 overview
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphics
 
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
Масштабируемые кроссплатформенные веб-приложения / Илья Пухальский (Epam)
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareКак сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftware
 
Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus Как написать XAML-приложение без Message Bus
Как написать XAML-приложение без Message Bus
 
Windows Azure and node js
Windows Azure and node jsWindows Azure and node js
Windows Azure and node js
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах#MBLTdev: Опыт использования MVVM в реальных проектах
#MBLTdev: Опыт использования MVVM в реальных проектах
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
 
Модульная архитектура Сбербанк Онлайн, Владимир Озеров и Александр Черушнико...
Модульная архитектура Сбербанк Онлайн, Владимир Озеров и Александр Черушнико...Модульная архитектура Сбербанк Онлайн, Владимир Озеров и Александр Черушнико...
Модульная архитектура Сбербанк Онлайн, Владимир Озеров и Александр Черушнико...
 
Вёрстка для мобильных телефонов
Вёрстка для мобильных телефоновВёрстка для мобильных телефонов
Вёрстка для мобильных телефонов
 
Наталия Макишвили "Вёрстка для мобильных устройств"
Наталия Макишвили "Вёрстка для мобильных устройств"Наталия Макишвили "Вёрстка для мобильных устройств"
Наталия Макишвили "Вёрстка для мобильных устройств"
 
Moxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магииMoxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магии
 

Storyboard Segregation