路由 0.9.0

Route 0.9.0

Nikolai Timonin 维护。



Route 0.9.0

  • Nikolai Timonin

Route

Swift5 CocoaPods compatible Carthage compatible Platform iOS License: MIT

该路由器不保持任何状态,所有所需的导航值都是基于 UIViewController 属性动态计算的。它与现有的项目导航系统完全兼容。您可以轻松地将路由导航命令调用与执行 segue 或推送/呈现/删除等进行混合。因此,它可以在任何现有的项目中轻松添加。

特性

  • 简单的导航命令
  • 返回到包含结果的任何控制器
  • 跳转到导航树中的任何控制器
  • 对现有项目导航超级友好
  • 可以无痛苦地添加到现有项目中
  • 架构无关
  • 轻量级

添加

提供路由器接入点(例如从视图控制器中)

extension UIViewController {

    var router: Router {
        return Router(window: UIApplication.shared.keyWindow, controller: self)
    }
}

示例

返回上一页 返回3 跳转到3
router.back(
  animated: true,
  prepare: { $0.randBg() }
)

router.back(
  to: ViewController.self,
  animated: true,
  condition: { $0.id == 3 },
  completion: { $0.alert() }
)
router.jump(
  to: ViewController.self,
  animated: true,
  condition: { $0.id == 3 },
  completion: { $0.alert() }
)

使用

前进导航

投影控制器

let controller: UIViewController = ...

router.present(controller, animated: true, completion: { ... })

当前导航控制器中的推控制器

router.push(controller, animated: true, completion: { ... })

注意: completion 闭包在过渡完成后立即调用。

向后导航

返回任意控制器

router.back(
    to: ViewController.self,
    animated: true,
    condition: { $0.id == 3 },
    prepare: { controller in ... },
    completion: { controller in ... }
)

除了目标控制器类型外,还提供条件,以防存在多个此类控制器在回退栈中。

返回上一个控制器

router.back(
    animated: true,
    prepare: { controller in ... },
    completion: { controller in ... }
)

返回窗口根目录

router.backToWindowRoot(
    animated: true,
    prepare: { controller in ... },
    completion: { controller in ... }
)

注意: prepare 关闭在过渡开始之前调用。这个关闭可以用来向目标控制器返回一些数据。

原地导航

替换当前控制器

router.replace(
    with: controller,
    animated: true,
    completion: { ... }
)

注意: 替换包括根视图控制器。

设置当前窗口根视图控制器

router.setWindowRoot(
    controller,
    animated: true,
    completion: { ... }
)

跳转到控制器

在导航树中,定位到任意位置的视图控制器。

router.jump(
    to: ViewController.self,
    animated: true,
    condition: { $0.id == 3 },
    prepare: { controller in ... },
    completion: { controller in ... }
)

用户内容导航树信息

查找控制器

let controller = router.find(ViewController.self, condition: { $0.id == 3 })

俯视图控制器

let controller = router.topController

返回栈

从当前控制器到窗口根获取返回导航栈

let controllers = router.backStack

从根到顶级控制器栈

let controllers = router.topStack

自定义容器控制器

在导航树中的自定义容器控制器必须采用三种容器控制器协议之一。

简单容器

如果容器只有一个子控制器,它必须实现 ContainerController 协议(《示例》)。

堆栈容器

如果容器包含子控制器堆栈,如 UINavigationController,则必须实现 StackContainerController 协议(示例)。

平面容器

如果容器中包含一个层次的子控制器,例如 UITabBarControllerUIPageViewController,它必须实现 FlatContainerController 协议。参见 标签控制器示例页面控制器示例

需求

  • Swift 4.2+
  • iOS 9.0+

安装

路由不包含任何外部依赖。

CocoaPods

将以下内容添加到 Podfile

pod 'Route'

手册

从源文件夹下载文件并将其拖入您的 Xcode 项目中。

许可

路由受以下协议的许可:[MIT 许可证](https://github.com/timonity/Route/blob/master/LICENSE)。