SeguePerformer 1.1.0

SeguePerformer 1.1.0

Drew Olbrich 维护。



SeguePerformer

Travis Platform Swift 5 License Twitter

概述

SeguePerformer 类提供了使用闭包来准备视图控制器的方法,用于通过编程方式启动 UIKit 的转场。

背景

在 UIKit 现有的程序化转场展示接口中,UIViewController 的 performSegueWithIdentifier:sender: 方法依赖于对 prepareForSegue:sender: 的非局部定义来配置在展示之前的新视图控制器。这在执行多个 performSegue 调用的上下文中可能会变得难以管理。

SeguePerformer 通过提供 performSegueWithIdentifier:sender:preparationHandler: 方法来改进这一点,该方法允许通过跟踪闭包参数来配置新的视图控制器。

安装

要使用 CocoaPods 安装 SeguePerformer,请将以下行添加到 Podfile 中

pod 'SeguePerformer'

要使用 Carthage 安装,添加以下内容到 Cartfile

github "drewolbrich/SeguePerformer"

或者,如果您愿意,可以将文件 SeguePerformer.swift 拖入您的项目中。

使用方法

  1. 向你的视图控制器添加一个懒加载的 seguePerformer 属性。
  2. 调用 seguePerformer.performSegue(withIdentifier:sender:preparationHandler:) 来启动目标视图控制器需要配置的转换。
  3. 重写你视图控制器中的 prepare(for:sender:) 方法,将参数传递给 seguePerformer.prepare(for:sender:)。如果不执行此步骤,preparationHandler 代码块将永远不会被调用。

示例

import SeguePerformer

class MyPresentingViewController: UIViewController {

    lazy var seguePerformer = SeguePerformer(viewController: self)

    func performMySegue(with myPropertyValue: Int) {
        // Perform the segue, configuring the destination view controller
        // before it is presented.
        seguePerformer.performSegue(withIdentifier: "mySegue", sender: self) {
            (myPresentedViewController: MyPresentedViewController) in
            myPresentedViewController.myProperty = myPropertyValue
        }
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // For SeguePerformer.performSegue's trailing closure to be called,
        // SeguePerformer must be notified about the prepare(for:sender:) call.
        if seguePerformer.prepare(for: segue, sender: sender) {
            return
        }

        // Prepare for interactive segues configured in Storyboard here.
    }

}

没有 SeguePerformer,编写的方式如下所示:

class MyPresentingViewController: UIViewController {

    var myPresentedViewControllerPropertyValue: Int?

    func performMySegue(with myPropertyValue: Int) {
        myPresentedViewControllerPropertyValue = myPropertyValue
        performSegue(withIdentifier: "mySegue", sender: self)
        // Continues in prepare(for:sender:)...
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let myPresentedViewController = segue.destination as? MyPresentedViewController,
            let myPresentedViewControllerPropertyValue = myPresentedViewControllerPropertyValue {
            // ...continued from performMySegue(with:)
            myPresentedViewController.myProperty = myPresentedViewControllerPropertyValue
            self.myPresentedViewControllerPropertyValue = nil
        }
    }

}

许可协议

此项目根据 MIT 开源许可协议。请参阅 LICENSE 文件以获取完整条款。