Вы можете создать пользовательский класс 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
(см. Ниже, как вы можете расширить делегат базового класса)
Расширение делегата из базового класса
Удачи:]