Для этого вида потока я использую координаторы потока .Это просто означает, что в самом контроллере представления у вас нет жестко заданного контроллера представления назначения, вы просто вызываете некоторого делегата (я называю его flowDelegate
), и этот делегат решает, что делать дальше.Пример вызова будет выглядеть следующим образом:
Obj-C:
@class HomeViewController;
@protocol HomeFlowDelegate
- (void)didTapRegistrationButtonInViewController:(HomeViewController*)viewController;
@end
@interface HomeViewController: UIViewController
@property (nonatomic,weak) id<HomeFlowDelegate> flowDelegate;
@end
@implementation HomeViewController
- (void)registrationButtonTapped {
[self.flowDelegate didTapRegistrationButtonInViewController:self];
}
@end
Swift:
protocol HomeFlowDelegate {
func didTapRegistrationButton(in viewController: HomeViewController)
}
class HomeViewController: ViewController {
weak var flowDelegate: HomeFlowDelegate?
func registrationButtonTapped() {
flowDelegate?.didTapRegistrationButton(in: self)
}
}
Делегат потока может решить, например, нажать ли новый экран илипредставить его модально или выполнить любой поток, который будет уместен.
Этот подход означает, что контроллеры представления независимы и могут быть повторно использованы в любом месте приложения.Вам просто нужно убедиться, что когда на экране появляется контроллер вида, ему назначается flowDelegate
.