系统提供的UILabel动画期间允许用户与UIButton交互

时间:2019-03-18 21:05:34

标签: ios swift uitableview uibutton uilabel

enter image description here

编辑:为清晰起见添加了Gif

我有一个UITableViewCell。该单元包含两个同级元素-一个按钮和一个标签。当您单击按钮时,新文本将被加载到标签中。

如果新文本很短,并且适合一行(如顶部的单元格),则一切顺利-您可以按所需的速度快得多地点击该按钮。

但是,如果新文本很长,并且必须填充两行或更多行(如底部的单元格),则UIKit会自动设置新文本的动画效果,将其从顶行向下滑动。在发生这种自动动画的同时,UIKit也禁用了该按钮,因此您无法与之交互。

在这种情况下,如果您尝试快速单击一些条目,则感觉不对,因为该按钮不会对每次按下都做出反应。

所以我的问题是:

在此动画期间,有什么方法可以启用与按钮的交互?我可以使用UIView.setAnimationsEnabled(false)将其完全关闭,但是看起来并不好。

编辑:自从被请求以来,这是更新标签的代码。每当NSManagedObject模型更改时,文本就会在didSet中更新。

extension MasterDataSource {

    private func configure(cell: UITableViewCell, for indexPath: IndexPath) {
        guard let cell = cell as? MasterCell else {
            fatalError("Cell Not Returned")
        }
        let category = categories.object(at: indexPath)
        guard let exercises = category.exercises else {
            return
        }
        guard exercises.count > 0  else {
            return
        }
        guard let activeExercise = category.activeExercise else {
            return
        }
        cell.model = MasterCell.Model(with: activeExercise)
    }
}

class MasterCell: UITableViewCell {

    @IBOutlet private weak var exerciseLabel: UILabel!
    @IBOutlet private weak var nextButton: UIButton!

    struct Model {
        let exercise: Exercise

        init(with exercise: Exercise) {
            self.exercise = exercise
        }
    }

    var model: Model? {
        didSet {
            guard let model = model,
                let exerciseTitle = model.exercise.title else {
                    return
            }
            exerciseLabel.text = exerciseTitle
        }
    }
}


0 个答案:

没有答案