2017-02-07 1 views
2

Пожалуйста, посмотри на картинку ниже:IOS, как игнорировать родительский вид получить сенсорное событие после того, как взгляд ребенка справиться с этим

enter image description here

У меня есть обычай UIControl как RangeSlider который я реализованный следовать this учебнику. Я размещаю RangeSlider внутри FilterViewController, который может вставляться или выходить.

В классе RangeSlider Я использовал 3 метода UIControl: beginTracking, continueTracking, endTracking для обработки события касания, когда пользователь перемещает индикатор слайдера.

В классе FilterViewController Я использовал UIPanGestureRecognizer для обработки события касания при входе или выходе пользователя.

Проблема

При попытке переместить индикатор ползунка, то ViewController также двигаться. И индикатор немного движется. Кажется, что и дочерний вид, и родительский взгляд получили событие касания.

Вопрос

Как я могу игнорировать родительское представление (ViewController) получать сенсорное событие?

ответ

0

Вы должны реализовать метод вашего PanGestureRecognizer делегата

gestureRecognizerShouldBegin (_ :)

редактирования: пожалуйста, попробуйте

override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { 
    guard let view = gestureRecognizer.view, view.isKind(of: UIControl.self) else { 
     return true 
    } 
    return false 
} 

Надеется, что это помогает.

+0

Я должен следить за каждым элементом управления и проверять, происходит ли событие касания с моими элементами управления. Есть ли способ облегчить или менее сложно решить мою проблему? –

0

Вы можете написать это в viewDidLoad().

self.view.isUserInteractionEnabled = false 
+0

Что это такое? –

+0

Ваш родительский контроллер не получит никаких событий касания. –

-1

Это должно помочь в FilterViewController (при условии, что это сенсорный делегат)

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if ([touch.view isDescendantOfView:self.tableView]) { 
     return NO; 
    } 

    return YES; 
} 

К сожалению, например, в Objective-C, вы можете легко превратить его в стрижа. Это означает, что таблица или scrollview, которые вы используете, не будут реагировать на касания своих подзонов (предполагая, что RangeSlider является дочерним элементом представления в виде таблицы). Дайте мне знать, если это не поможет, я заставил эти проблемы в прошлом несколькими способами!

+0

Я пытался использовать этот способ, но это не работа. Проблема в том, что я хочу, чтобы мой ViewController View игнорировал событие касания, когда оно встречается на моем «RangeSlider», но не в других подвидях ViewController's View. –

+0

вас! if ([touch.view isDescendantOfView: self.slider]) {не работает? Извините, не могу помочь более подробно, без кода, может быть, вы можете поделиться небольшим тестовым проектом? – iago849

Смежные вопросы