Разрешить взаимодействие пользователя с UIButton во время системной анимации UILabel - PullRequest
0 голосов
/ 19 марта 2019

enter image description here

РЕДАКТИРОВАТЬ: Gif добавлен для ясности

У меня есть UITableViewCell. Ячейка содержит два родственных элемента - кнопку и метку. При нажатии кнопки новый текст загружается в метку.

Если новый текст короткий и помещается на одной строке (как в верхней ячейке), все идет хорошо - вы можете нажать на эту кнопку довольно быстро, как вам хочется.

Но если новый текст длинный и должен заполнить две или более строки (как в нижней ячейке), UIKit автоматически оживляет новый текст, сдвигая его вниз от верхней строки. Во время этой автоматической анимации UIKit также отключает кнопку, чтобы вы не могли с ней взаимодействовать.

Если вы попытаетесь быстро щелкнуть несколько записей в этом сценарии, он просто чувствует себя неправильно, так как кнопка не будет реагировать на каждое нажатие.

Итак, мой вопрос:

Есть ли способ включить взаимодействие с кнопкой во время этой анимации? Я могу полностью отключить его, используя UIView.setAnimationsEnabled(false), но тогда это будет выглядеть не так хорошо.

РЕДАКТИРОВАТЬ: так как это было запрошено, вот код, который обновляет метку. Текст обновляется в didSet всякий раз, когда изменяется модель NSManagedObject.

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
        }
    }
}


...