Определить, когда UIPickerView начинает меняться / двигаться - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь отреагировать на событие, когда UIPickerView начал двигаться (не тогда, когда строка уже была выбрана).

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

Есть идеи, какие есть альтернативы?

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете создать пользовательский класс UIPickerView и переопределить hitTest(point:with:). Создавая протокол, вы можете отправить текущий сборщик с помощью метода делегата на контроллер и нарисовать все, что захотите:

protocol CustomPickerViewDelegate {
    func didTapped(_ picker: CustomPickerView)
}

class CustomPickerView: UIPickerView {

    var myDelegate: CustomPickerViewDelegate?

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        // Only test for points in your needed view
        if !self.point(inside: point, with: event) {
            return nil
        }

        // Return using CustomPickerViewDelegate the current picker
        // that can be used to determine which one was selected
        myDelegate?.didTapped(self)

        // Call super.hitTest(_: with:)
        return super.hitTest(point, with: event)
    }
}

НЕ забывайте (в вашем контроллере: например. YourViewController):

self.pickerView.myDelegate = self.

Создайте расширение вашего контроллера для подписки на протокол CustomPickerViewDelegate:

extension YourViewController: CustomPickerViewDelegate {
    func didTapped(_ picker: CustomPickerView) {
        // do what you want here
        self.addBorderTo(picker: picker)
    }
}

Если хотите, вы можете расширить UIPickerViewDelegate (см. Ниже, как вы можете расширить делегат базового класса)

Расширение делегата из базового класса

Удачи:]

...