Nano Hash - криптовалюты, майнинг, программирование

shouldReceiveTouch в UITableViewCellContentView

Я пытаюсь игнорировать нажатия UITapGestureRecognizer на UITableView со следующим:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
      if ([touch.view isKindOfClass:[UITableViewCellContentView class]]) {
          return NO; // ignore the touch
      }
      return YES; // handle the touch
}

Не компилируется: «Использование необъявленного идентификатора UITableViewCellContentView».

Недокументированный класс? Нужно подкласс? Лучший способ сделать это?

Спасибо за любую помощь.


Ответы:


1

Это, кажется, делает это:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if([touch.view isKindOfClass:[UITableViewCell class]]) {
         return NO;
    }
    // UITableViewCellContentView => UITableViewCell
    if([touch.view.superview isKindOfClass:[UITableViewCell class]]) {
         return NO;
    }
    // UITableViewCellContentView => UITableViewCellScrollView => UITableViewCell
    if([touch.view.superview.superview isKindOfClass:[UITableViewCell class]]) {
         return NO;
    }
    return YES; // handle the touch
}
07.11.2012
  • Это сломано в ios7. touch.view.superView == UITableViewCellScrollView 14.09.2013
  • Как упоминал Леголас, Broken на iOS7. Поскольку иерархия изменилась, требуется четвертая проверка. .superview.superview.superview также необходимо проверить! 01.10.2013
  • Я ловлю на touch.view.superview.superview на iOS ver 7.0 =› 3-й чек... 06.01.2014
  • Если вам нужна вся таблица (включая области без ячеек), замените UITableViewCell на UITableView. 16.09.2014

  • 2

    Ты можешь сделать это.

        - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
        {
            if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
                return NO;
            }else{
                return YES;
            }
        }
    
    09.07.2014
  • Очень приятно, было бы неплохо узнать об этом больше 11.08.2016

  • 3

    Я только что столкнулся с этой проблемой, и следующее решение работает во всех версиях iOS без риска того, что Apple изменит иерархию представлений tableView. В основном, сохраните ссылку на свой UITableView:

     - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
          if([touch.view isDescendantOfView:detailsTableView]) {
              return NO;
          }
          return YES;
       }
    
    //isDescendantOfView:YES if the receiver is an immediate or distant subview of view or if view is the receiver itself; otherwise NO.
    
    25.03.2014
  • Спасибо за это решение. В iOS8 они снова изменили иерархию представлений UITableView. 27.01.2015
  • Должен быть принятый ответ. Это решает проблему изменения иерархии 13.12.2019

  • 4

    Вот быстрое решение для выбранного ответа.

    Я не мог использовать именованную проверку зависимостей MyTableView, потому что у меня был собственный BaseViewController, от которого происходят многие контроллеры представлений. Некоторые контроллеры представлений имеют табличное представление, некоторые имеют представление коллекции или и то, и другое, но во всех случаях распознаватель жестов крадет их прикосновения.

    Я не хотел помещать этот код обработки жестов в каждый подкласс, поэтому единственный способ заставить его работать в базовом классе:

    extension BaseViewController: UIGestureRecognizerDelegate {
    
        func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
            var view = touch.view
            while view != nil {
                if view!.isKindOfClass(UICollectionView) || view!.isKindOfClass(UITableView) {
                    return false
                } else {
                    view = view!.superview
                }
            }
            return true
        }
    
    }
    
    11.01.2016

    5

    Я думаю, что проще и понятнее проверить сенсорную область.

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
                           shouldReceive touch: UITouch) -> Bool {
    
        let point = touch.location(in: viewContentContainer)
        return !tableRules.frame.contains(point)
    }
    
    02.08.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..