strongself / The-Book-of-VIPER

the one and the only
Other
958 stars 129 forks source link

Взаимодействие с Container viper module #78

Closed krasnodar95 closed 7 years ago

krasnodar95 commented 7 years ago

Доброго времени суток. Могли бы вы показать пример того как настроить в роутере родительского модуля, встроенный модуль(который встроен через Embed segue)? Конкретно я хочу сделать родительский модуль как RamblerViperModuleOutput от встроенного модуля. И затем записать в свойство встроенного модуля moduleOutput этот самый родительский модуль. Я не пойму где нужно сделать эту настройку в случае со встроенными модулями.

suriksarkisyan commented 7 years ago

@krasnodar95, привет. В конференциях есть такой пример в SearchRouter Если на словах, то ты из презентера текущего модуля передаешь в свой роутер сам презентер. Затем, когда дергаешь segue в роутере при использовании McFlurry в блоке thenChainUsingBlock есть возвращаемый параметр. Вот там ты и возвращаешь презентер текущего модуля, который передал в роутер return презентерТекущегоМодуля И в следующем модуле в презентере ты должен создать проперти moduleOutput закрытый протоколом наследником RamblerViperModuleOutput. Тогда возвращаемый презентер автоматически установится в эту проперти.

Надеюсь понятно объяснил. Вот еще скину пример из конференций. А подробнее уже смотри в конференциях в SearchRouter - (void)configureReportsSearchModuleWithSearchTerm:(NSString *)searchString moduleOutput:(id<ReportsSearchModuleOutput>)moduleOutput { [[self.transitionHandler openModuleUsingSegue:kReportListModuleToReportsSearchModuleSegue] thenChainUsingBlock:^id<ReportsSearchModuleOutput>(id<ReportsSearchModuleInput> moduleInput) { [moduleInput configureReportsSearchModuleWithSearchTerm:searchString]; return moduleOutput; }]; }

krasnodar95 commented 7 years ago

Ааа, вот в чем косяк. Я вместо RamblerEmbedSegue использовал обычный Embed segue и не врубался где его настроить. Спасибо большое за помощь, и спасибо за супербыстрый ответ)

suriksarkisyan commented 7 years ago

@krasnodar95, не за что, обращайся. Со стандартным контейнером это не работает, к сожалению, поэтому да, надо использовать просто вью + RamblerEmbedSegue