首页 > 解决方案 > UIStoryboardSegue 为子类中的属性设置动画

问题描述

我有一个UIStoryboardSegue用下一个视图控制器替换当前视图控制器的子类。

由于我们Animates在界面编辑器中有一个属性,我想在子类中访问这个属性。

在此处输入图像描述

我的代码如下:

class ReplaceSegue: UIStoryboardSegue {

    override func perform() {
        var viewControllers = source.navigationController?.viewControllers.dropLast() ?? []
        viewControllers.append(destination)
        source.navigationController?.setViewControllers(viewControllers.map {$0}, animated: true) // I dont want this `true` to be hardcoded
    }
}

标签: iosiphoneswiftstoryboard

解决方案


根据UIStoryBoardSegue课堂评论

segue 运行时将在调用此方法之前调用 +[UIView setAnimationsAreEnabled:],基于 segue 的 Properties Inspector 中的 Animates 复选框的值。

所以很明显你可以通过使用来读取动画复选框的值

UIView.areAnimationsEnabled

所以在我的自定义segue中

class MySegue: UIStoryboardSegue {
    override func perform() {
        debugPrint(UIView.areAnimationsEnabled)
    }
}

false如果动画复选框是unchecked或者true如果是的话,这会打印出来checked:)

所以在你的情况下

class ReplaceSegue: UIStoryboardSegue {
    override func perform() {
            var viewControllers = source.navigationController?.viewControllers.dropLast() ?? []
            viewControllers.append(destination)
            source.navigationController?.setViewControllers(viewControllers.map {$0}, animated: UIView.areAnimationsEnabled)
    }
}

我希望发生的事情已经很清楚了,以防你仍然有疑问,这里是解释,iOS 检查动画复选框值并使用它来设置动画是否启用,方法是setAnimationsAreEnabled在调用之前调用界面中的动画复选框的值perform()方法。

因此,当控件到达内部执行时,您可以确定 iOS 已经读取了动画的值复选框并使用它来设置setAnimationsAreEnabled您现在要做的就是要求areAnimationsEnabled获取动画的值复选框。

所以这应该为您提供动画复选框的价值:)

希望能帮助到你 :)


推荐阅读