iOS, как игнорировать родительское представление, получает событие касания после просмотра дочернего элемента
Пожалуйста, взгляните на картинку ниже:
У меня есть пользовательский UIControl
как RangeSlider
который я реализовал, следуя этому руководству. Я размещаю RangeSlider
внутри FilterViewController
который может перемещаться или выходить.
- Почему моя выбранная ячейка UITableView не отображает аксессуар галочки?
- Parse iOS SDK - «Вы должны вызвать setApplicationId: clientKey: в Parse для настройки Parse.»
- removeFromSuperview () не работает
- Как я могу получить доступ к IBOutlet в другом классе?
- Swift 3 - как скрыть строку состояния при использовании полного экрана
В классе RangeSlider
я использовал 3 метода UIControl
: beginTracking, continueTracking, endTracking
для обработки события касания, когда пользователь перемещает индикатор слайдера.
В классе FilterViewController
я использовал UIPanGestureRecognizer
для обработки события касания при UIPanGestureRecognizer
пользователя или выходе пользователя.
проблема
Когда я пытаюсь переместить индикатор слайдера, ViewController
также перемещается. И индикатор немного движется. Кажется, что и дочерний вид, и родительский взгляд получили событие касания.
Вопрос
Как я могу игнорировать родительское представление ( ViewController
) получать событие касания?
- Строковые символы (метки) не учитываются корректно
- setRightBarButtonItems не работает
- Подходящее место для инициализации переменной члена Swift
- Получение ошибки в SpriteKit. - Тема 1: EXC_BREAKPOINT (код = 1, подкод = 0x1007351fc)
- Фреймворки Firebase, встроенные в частную инфраструктуру iOS
- UITableViewCell делегировать indexPath
- Регистрация в виде таблицы - метки UINib Argument '(nibName :, Bundle :)' не соответствуют никаким доступным перегрузкам
- Swift: Могу ли я использовать домашние и рабочие места с помощью MapKit?
Вы можете написать это в viewDidLoad ().
self.view.isUserInteractionEnabled = false
Вы должны реализовать метод вашего делегата PanGestureRecognizer
gestureRecognizerShouldBegin (_ 🙂
редактирование: пожалуйста, попробуйте
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { guard let view = gestureRecognizer.view, view.isKind(of: UIControl.self) else { return true } return false }
Надеюсь это поможет.
Это должно помочь в FilterViewController (при условии, что это сенсорный делегат)
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view isDescendantOfView:self.tableView]) { return NO; } return YES; }
Извините, например, в объективе-c, вы можете легко преобразовать его в быстрый. Это означает, что таблица или scrollview, которые вы используете, не будут реагировать на касания своих подзонов (предполагая, что RangeSlider является дочерним элементом представления в виде таблицы). Дайте мне знать, если это не поможет, я заставил эти проблемы в прошлом несколькими способами!