SegueContext 5.0.0

SegueContext 5.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布日期上次发布2018年7月
SPM支持SPM

tokorom维护。



  • tokorom

SegueContext

Swift Version License Cocoapods Compatible Carthage Compatible

您可以通过它轻松地将上下文传递到目标视图控制器。

send-context

这是Swift版本的TKRSegueOptions的新版本!

您现在对视图控制器转换还有什么不满吗?

  • 耦合紧密!
  • 这真是个麻烦...

这是一段麻烦的代码...

self.performSegue(withIdentifier: "Next", sender: nil)

// and

override func prepareForSegue(segue: UIStoryboardSegue, sender sender: AnyObject?) {
    switch segue.identifier {
    case "Next":
        if let nextViewController = segue.destinationViewController as? NextViewController {
            nextViewController.value = 10
            nextViewController.delegate = self
        }
    case "OtherWithNavi":
        if let navigationController = segue.destinationViewController as? UINavigationController {
            if let nextViewController = navigationController.viewControllers.first as? NextViewController {
              nextViewController.value = 20
            }
        }
    default:
        break
    }
}

// and

extension MyViewController: NextViewControllerDelegate {
    override func itemDidSelect(item: Item) {
        // get an item!
    }
}

SegueContext会解决这个问题!

这是使用SegueContext的新简洁代码!嗯!

self.performSegue(withIdentifier: "Next", context: 10) { (item: Item) -> Void in
    // get an item!
}

简单用法

当您想要向目标 ViewController 发送上下文时

  • 源 ViewController
self.performSegue(withIdentifier: "Next", context: 10)
  • 目标 ViewController
if let value: Int = self.contextValue() {
    self.value = value
}

当您需要从目标 ViewController 获取回调时

  • 源 ViewController
self.performSegue(withIdentifier: "Next", context: 10) { (item: Item) -> Void in
    // get an item!
}
  • 目标 ViewController
if let callback: (Item) -> Void = self.callback() {
    callback(selectedItem)
}

当您需要容器 ViewController 时

  • 示例 1:手工方式
if let viewController = self.childViewControllers.first as? XXX {
    viewController.sendContext(10)
}
  • 示例 2:使用 prepareForSegue
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    self.contextSenderForSegue(segue) { segueIdentifier, viewController, sendContext in
        switch segueIdentifier {
        case "Embedded1", "Embedded2":
            sendContext(10)
        default:
            break
        }
    }
}

其他用法

performSegue

// normal
self.performSegue(withIdentifier: "Next", context: 10)

// with callback
self.performSegue(withIdentifier: "Next", context: 10) { (item: YourItem) -> Void in
    // get a your item!
}

presentViewController

self.present(storyboardName: "xxx", animated: true, context: 10)
self.present(storyboardName: "xxx", identifier: "xxx", animated: true, context: 10)
self.present(storyboardName: "xxx", animated: true, context: 10)
self.present(storyboardName: storyboard, animated: true, context: 10)

self.present(storyboardName: "xxx", context: 10) { (item: YourItem) -> Void in
    // get a your item!
}

推送ViewController

self.pushViewController(storyboardName: "xxx", animated: true, context: 10)
self.pushViewController(storyboardName: "xxx", identifier: "xxx", animated: true, context: 10)
self.pushViewController(storyboardName: "xxx", animated: true, context: 10)
self.pushViewController(storyboard: storyboard, animated: true, context: 10)

// with callback
self.pushViewController(storyboardName: "xxx", context: 10) { (item: YourItem) -> Void in
    // get a your item!
}

手动发送上下文

viewController.sendContext(10)
let vc = UIViewController.viewController(storyboardName: "xxx", context: 10) as? MyViewController
let vc = UIViewController.viewController(storyboardName: "xxx", identifier: "xxx", context: 10) as? MyViewController
let vc = UIViewController.viewController(storyboard: storyboard, context: 10) as? MyViewController

更多好消息!

  • SegueContext 会自动将上下文发送到 UINavigationController 的 rootViewController
  • SegueContext 会自动将上下文发送到 UITabBarController 的 viewControllers

send-context

安装

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。

您可以使用以下命令安装:

$ gem install cocoapods

要将 SegueContext 集成到使用 CocoaPods 的 Xcode 项目,请在您的 Podfile 中指定它

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

pod 'SegueContext'

然后,运行以下命令:

$ pod install

Carthage

Carthage 是一种去中心化的依赖管理工具,用于自动将框架添加到您的 Cocoa 应用程序中。

您可以使用以下命令(通过 Homebrew)安装 Carthage:

$ brew update
$ brew install carthage

要将 SegueContext 集成到使用 Carthage 的 Xcode 项目中,请在您的 Cartfile 中指定它

github "tokorom/SegueContext"

然后,运行以下命令:

$ carthage update

然后,通过 SegueContext.framework 链接您的应用程序。