以编程方式创建转场动画

207

我有一个普通的UIViewController,所有我的UIViewsControllers都会继承它以重用一些共同操作。

我想在这个“Common”UIViewController上设置一个segue,以便所有其他UIViewControllers都可以继承它。

我正在尝试找出如何以编程方式实现这一点。

我猜问题也可以是如何为所有UIViewControllers设置一个segue,而不用手动进入story board进行设置。

13个回答

1
我进行了反向工程,并制作了一个UIStoryboard的segue的开源(重新)实现:https://github.com/acoomans/Segway 使用该库,您可以在不使用任何故事板的情况下以编程方式定义segue。
希望它能有所帮助。

0

这是关于以编程方式创建segue的代码示例:

class ViewController: UIViewController {
    ...
    // 1. Define the Segue
    private var commonSegue: UIStoryboardSegue!
    ...
    override func viewDidLoad() {
        ...
        // 2. Initialize the Segue
        self.commonSegue = UIStoryboardSegue(identifier: "CommonSegue", source: ..., destination: ...) {
            self.commonSegue.source.showDetailViewController(self.commonSegue.destination, sender: self)
        }
        ...
    }
    ...
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // 4. Prepare to perform the Segue
        if self.commonSegue == segue {
            ...
        }
        ...
    }
    ...
    func actionFunction() {
        // 3. Perform the Segue
        self.prepare(for: self.commonSegue, sender: self)
        self.commonSegue.perform()
    }
    ...
}

你正在从你的动作方法中调用 self.prepare(for: self.commonSegue, sender: self)。那么在 prepare(for:sender) 方法中比较 if self.commonSegue == segue {...} 的意义是什么? - nayem
@nayem:在 prepare(for:sender:) 中,您可以在目标视图控制器显示之前对其进行配置。当然,您也可以在 actionFunction 中完成此操作。 - jqgsninimo
@nayem:我这样做的原因是为了与其他segue的处理保持一致。 - jqgsninimo

0
实际上有几个问题:
首先,在您上传的项目中,segue没有带有“segue1”标识符:
没有标识符
如果您还没有填写该标识符,则应填写该标识符。
其次,由于您正在从表视图推送到表视图,因此您正在调用initWithNibName来创建视图控制器。您真正想要使用instantiateViewControllerWithIdentifier。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接