Lepaya-Coordinator
这是一个实用的 pod,可以根据需要轻松实现 Coordinator 设计模式。如果您的应用是标签页式的,您可以从以下几行代码开始
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
guard let navigation = self.navigationController else { return }
let green = GreenController()
let coordinator = VCCoordinator(push: green, presenter: navigation)
green.coordinator = coordinator
coordinator.start()
从一个控制器以模态形式呈现一个新的控制器
guard let navigation = self.navigationController else { return }
let green = GreenController()
green.loadButtonBack()
let coordinator = VCCoordinator(presentModally: green, navigation: navigation, presenter: self)
green.coordinator = coordinator
coordinator.start()
不必再疑惑是否需要关闭或弹出控制器才能返回,请使用 EUIViewController 扩展方法
self.goBack()
注意:CoordinatorPackage 使用名为 ExtendedViewController
的 UIViewController 子类,该子类扩展了类的一些基本功能
isModal
可以立即知道您正在处理的控制器是以模态形式呈现还是不是。coordinator
是VCCoordinator
,用于返回到上一个控制器。- 使用
setTabBarControllerDelegate()
将控制器设置为UITabBarControllerDelegate
以能够加载和重新加载(只要它是可见的)每个标签的 rootingViewController。
整个应用将由 CoordinatorSession.shared
管理,它持有对 TabCoordinator
或 NCCoordinator
的引用。要执行对标签选择的自定义操作,您可以使用 TabCoordinatorDelegate
CoordinatorSession.shared.tabCoordinator?.delegate = self
并实现以下方法
func reloadRootController(_ controller: EUIViewController, atIndex index: Int)
使用 CocoaPods 进行安装
pod 'Lepaya-Coordinator'
或者只需下载/克隆仓库,并将 'Sources' 文件夹的内容拖放到您的项目中。