Определить, когда UIPickerView начинает меняться / двигаться
Я пытаюсь отреагировать на событие, которое UIPickerView
начал двигаться (не тогда, когда строка уже была выбрана).
Я искал методы делегата, и ни один из них не помог. Я также попытался зарегистрировать уведомление, но не смог найти ни одного, который бы уведомлял, когда пользователь кладет палец на компонент и начинает прокручивать.
Есть идеи, какие есть альтернативы?
1 ответ
Вы можете создать собственный класс 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
(см. ниже, как вы можете расширить делегат базового класса)
Расширение делегата из базового класса
Удачи:]