2015-04-10 4 views
1

В моем SecondViewController у меня есть UITableView с обычаем UITableViewCell, где у меня есть UIPanGestureRecognizer, и я хочу, чтобы это терпеть неудачу, когда otherGestureRecognizer является UIPanGestureRecognizer от ViewController FirstViewControllerУзнайте мнение жест был установлен

UIPanGestureRecognizer из клетка установлена ​​на себя, и я попытался с помощью gestureRecognizer: shouldRequireFailureOfGestureRecognizer:

override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    let view = otherGestureRecognizer.view 
    if let view as? FirstViewController.view { // Obviously doesn't work 
     return true 
    } 
    return false 
} 

вопрос заключается в том, как я могу провалить UIPanGestureRecognizer из UITableViewCell, когда жест был RECOG из FirstViewController?

+0

Забудьте о распознавателях жестов на мгновение. С точки зрения более высокого уровня, что вы пытаетесь сделать? – matt

+0

В моем FirstViewController у меня есть 2 представления, добавленные из двух других ViewControllers. Когда я использую 'UIScreenEdgePanGestureRecognizer' для панорамирования верхнего вида, состояние изменится на' open', а 'UIPanGestureRecognizer' будет включен, поэтому я смогу откинуть верхний вид на своем месте. Это хорошо работает, если не существует «UITableViewCell». Ячейки имеют свой собственный 'UIPanGestureRecognizer', который мешает мне перетащить верхний вид. – Eendje

+0

Если возможно, я хотел бы решить его с помощью UIGestureRecognizerDelegate вместо использования другого делегата или 'NSNotification'. – Eendje

ответ

0

Это может показаться глупым, но мне кажется, что ваша проблема - это просто одно из идентификаторов: это распознающий жест, otherGestureRecognizer, конкретный распознаватель жестов, с которым я беспокоюсь и должен уступить? Что происходит со мной, сразу два варианта:

  • У вас есть, как вы правильно отмечаете, его view. Нет ли вопросов, которые вы можете задать об этом представлении, которые помогут вам определить его? Имеет ли он отличительный backgroundColor или любую другую функцию, которая поможет здесь? Как насчет его класса? Это простой ванильный UIView, или это какой-то отличительный класс?

  • У вас также есть UIPanGestureRecognizer. Таким образом, простое решение, которое я бы использовал, - это подкласс UIPanGestureRecognizer: давайте назовем подкласс MySpecialPanGestureRecognizer. Этот подкласс не имеет специальных функций и не имеет никакой цели, кроме как выступать в качестве идентификатора! Когда вы дадите представление его распознавателю жестов, сделайте этот распознаватель жестов MySpecialPanGestureRecognizer. Теперь вы можете задать вопрос: otherGestureRecognizer is MySpecialPanGestureRecognizer.

+0

конечно .. Я использовал так много подклассов жестов, и почему-то я не мог придумать, чтобы использовать его здесь. Также было понятно, что это было очень легко понять. – Eendje

+0

Было бы хорошо, если бы каждый класс имел произвольное встроенное свойство 'name' или другой идентификатор, и на самом деле, если бы вы действительно хотели, чтобы вы ввели такое свойство в Cocoa с расширением NSObject. Некоторые классы, такие как CALayer, позволяют вам сделать это, поэтому еще одним решением было бы использовать 'setValue: forKey:', чтобы присвоить этому слою «этот слой» идентификатор, который позже можно попытаться получить с помощью «valueForKey:». Но просто использование подкласса в качестве идентификатора проще ... – matt

+0

Наконец, ради полноты я должен указать, что если у вас уже есть ссылка на это представление, как 'theView', вы можете спросить, является ли' otherGestureRecognizer.view === theView', используя оператор тройного равенства. – matt