CoordinatorPackage 2.0.3

CoordinatorPackage 2.0.3

Alessio Sardella 维护。



  • Alessio Sardella

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 可以立即知道您正在处理的控制器是以模态方式显示的还是不是。
  • coordinatorVCCoordinator,用于返回到上一个控制器。
  • setTabBarControllerDelegate() 将控制器设置为 UITabBarControllerDelegate,以便能够加载和重新加载(仅在可见时)每个标签的rootViewController。

整个应用将通过 CoordinatorSession.shared 来管理,它持有一个指向 TabCoordinatorNCCoordinator 的引用。要执行对标签选择的自定义操作,可以使用 TabCoordinatorDelegate

CoordinatorSession.shared.tabCoordinator?.delegate = self

然后实现此方法

func reloadRootController(_ controller: EUIViewController, atIndex index: Int)

使用cocoapods安装

pod 'CoordinatorPackage', '~> 2.0'

或者直接下载/克隆仓库,并将'Sources'文件夹的内容拖到您的项目中。