Intereting Posts
Прозрачный титул UIButton Основные данные и NSFetchedResultsController: игнорирование полей в контроллереDidChangeContent Неустранимая ошибка: неожиданно найден nil при развертывании необязательного значения в классе наследования Как сервер должен аутентифицироваться от имени пользователя iOS? написать буфер символов в Bluetooth Low Energy IOS UITest ошибка при попытке выбора элемента выбора Как правильно обрабатывать время устройства и временные конфликты Amazon S3? добавить изображение для каждого фрагмента в iOS-диаграмме pieChart Экспорт аналитики Apple App Store StoryBoard – UITabBarController + UINavigationController – переход от одного контроллера навигации к другому Как показать два текста одной метки ниже других в iOS? Почему didUpdatePushCredentials никогда не вызывал Amazon S3 Переименование объектов с использованием Objective C Все приложения сбой при отключении CoreLocation «значительные изменения местоположения» и «мониторинг региона»

UITableViewCell касается субвью без выбора ячейки

У меня есть собственный tableviewCell с UIImageView imgView внутри. Я добавил UITapGestureRecognizer в imgView, так что я могу изменить изображение imgView всякий раз, когда я нажимаю на него. Однако, когда я нажимаю didSelectRowAtIndexPath , также запускается didSelectRowAtIndexPath . Я хочу:

  • При нажатии снаружи imgView: Trigger didSelectRowAtIndexPath
  • При нажатии внутри imgView: Block didSelectRowAtIndexPath , просто вызовите обратный вызов жестов, чтобы изменить изображение imgView.

Функция обратного вызова уже вызывается при нажатии внутри imgView, но я не могу заблокировать didSelectRowAtIndexPath в этом случае. Я много часов искал, но пока не нашел решение. Я использую цель-c . У кого-нибудь есть идеи для моей проблемы? Благодарим всех!

Обновить

Наконец, я узнал, в чем моя ошибка.

 UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onFavouriteIconTapped:)]; tapGesture.cancelsTouchesInView = NO; // this should be YES by default [_ivImageView addGestureRecognizer:tapGesture]; 

Просто установите cancelsTouchInView = YES исправьте мою проблему. Если значение YES, событие touch будет потребляться с помощью ivImageView, а ячейка не будет выбрана. Надеюсь, это поможет кому-то, у кого такая же проблема.

Твой подход прекрасен. Селектор жестов нажатия не вызван, вероятно, потому, что вы, возможно, не включили пользовательское взаимодействие UIImageView.

imageView.userInteractionEnabled = TRUE;

Значение по умолчанию для userInteractionEnabled равно NO, для UIImageView.

После того, как ваш селектор начнет звонить, вы получите желаемое поведение, то есть при щелчке imgView, переключатель выбора жестов вызывается и на ощупь за пределами imgView didSelectRowAtIndexPath будет вызван. Это соответствует правилам цепи отправителя iOS.

@SHN, вы говорите правильно. Может быть, @meaholik, вы пропустили эту линию.

 imageView.userInteractionEnabled = TRUE; 

Вы также можете проверить эту ссылку .

Надеюсь, это поможет вам. 🙂