SegueContext
您可以通过它轻松地将上下文传递到目标视图控制器。
这是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
安装
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
链接您的应用程序。