CoordinatorPackage
这是一个有用的pod,可以轻松实现协调者设计模式。如果您的应用是标签型的,您可以从这几行代码开始
self.window = UIWindow(frame: UIScreen.main.bounds)
let appCoordinator = TabCoordinator(window: self.window!)
appCoordinator.setup(tabNames: ["first", "second"],
tabImages: ["tab_image_01", "tab_image_02"]) { () -> ([NCCoordinator]) in
let firstTab = NCCoordinator(rootController: RedController())
let secondTab = NCCoordinator(rootController: GreenController())
return [firstTab, secondTab]
}
appCoordinator.firstTabToLoad = 1 // select which tab will be visible at launch
appCoordinator.start()
如果您喜欢简单的导航
let appCoordinator = NCCoordinator(rootController: RedController())
appCoordinator.start(window: self.window!)
向Controller推送新的控制器
self.getNavigationController { (navigation) in
let green = GreenController()
let coordinator = VCCoordinator(push: green, presenter: navigation)
green.coordinator = coordinator
coordinator.start()
}
以模态方式展示新的一个
self.getNavigationController { (navigation) in
let green = GreenController()
green.loadButtonBack()
let coordinator = VCCoordinator(presentModally: green, navigation: navigation, presenter: self)
green.coordinator = coordinator
coordinator.start()
}
不再费心考虑是否需要 dismiss 或 pop 控制器来返回,请使用 EUIViewController 的扩展方法
self.goBack()
注意:CoordinatorPackage 使用名为 ExtendedViewController
的 UIViewController 子类,它扩展了类的一些基本功能。
isModal
可以立即知道您正在处理的控制器是以模态方式显示的还是不是。coordinator
是VCCoordinator
,用于返回到上一个控制器。setTabBarControllerDelegate()
将控制器设置为UITabBarControllerDelegate
,以便能够加载和重新加载(仅在可见时)每个标签的rootViewController。
整个应用将通过 CoordinatorSession.shared
来管理,它持有一个指向 TabCoordinator
或 NCCoordinator
的引用。要执行对标签选择的自定义操作,可以使用 TabCoordinatorDelegate
CoordinatorSession.shared.tabCoordinator?.delegate = self
然后实现此方法
func reloadRootController(_ controller: EUIViewController, atIndex index: Int)
使用cocoapods安装
pod 'CoordinatorPackage', '~> 2.0'
或者直接下载/克隆仓库,并将'Sources'文件夹的内容拖到您的项目中。