UILabel с дескриптором жесты Tap не работает

Я разработал UICollectionViewCell используя XIB и в этой пользовательской ячейке у меня есть UILabel , взаимодействие с пользователем которого я включил.

В моем viewcontroller когда я проектирую cell , вот мой код.

 UITapGestureRecognizer *buyNowTapped = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(buyNowClicked:)]; buyNowTapped.numberOfTapsRequired = 1.0; cell.buy.tag = indexPath.row; cell.buy.userInteractionEnabled = YES; [cell.buy addGestureRecognizer:buyNowTapped]; -(void)buyNowClicked : (id)sender { UIButton *button; UILabel *label; if([sender isKindOfClass:[UIButton class]]) { button = (UIButton *)sender; [self buyService:button.tag]; } else if ([sender isKindOfClass:[UILabel class]]) { label = (UILabel *)sender; [self buyService:label.tag]; } } 

Но добавленный жест нажатия не работает.

создать ячейку custome с тегом и использовать

 -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"%ld", (long)indexPath.row); } 

Примечание: добавлен TapGestureRecognizer где-то и он предотвращает selecton ячейки didselectitematindexpath

Мое предложение состоит в том, чтобы переработать ваш дизайн и изменить UILabel на UIButton , потому что UIButton просто обрабатывает распознавание кранов, а также у вас нет проблемы с переадресацией, также перенаправленной в UICollectionView ( didSelectItemAtIndexPath: будет вызываться действительно).

Итак, смените ярлык на кнопку и установите метод buyNowClicked: на мероприятии TouchUpInside .

UPDATE: Если вы не можете удалить UILabel по какой-либо причине, поместите UIButton под UILabel (с тем же frame и, в конечном итоге, с NSConstraints ), и переместите метод buyNowClicked: при событии TouchUpInside на кнопку, а затем вы легко выиграете

  1. Вы должны добавить этот код в свой пользовательский класс UICollectionViewCell .

  2. Затем создайте делегат, который будет реагировать на нажатие.

  3. Назначьте делегата в cellForRowAtIndexPath of Collection View.

сообщите мне, если вам нужно подробное объяснение.

Изменить 1: Код:

MyCell.swift:

 import UIKit protocol MyCellDelegate { func lblNameTapped(cell: MyCell) } class MyCell: UICollectionViewCell { @IBOutlet var lblName: UILabel! var lblNameTapRec:UITapGestureRecognizer! var delegate: MyCellDelegate? override func awakeFromNib() { super.awakeFromNib() // Initialization code lblNameTapRec = UITapGestureRecognizer(target: self, action: #selector(MyCell.lblNameTapped(_:))) lblName.userInteractionEnabled = true lblName.addGestureRecognizer(lblNameTapRec) } func lblNameTapped(sender: AnyObject){ delegate?.lblNameTapped(self) } } 

ViewController.Swift:

 import UIKit class WallOfPraizeVC: UIViewController,UICollectionViewDataSource,UICollectionViewDelegate,MyCellDelegate { @IBOutlet var collectionView: UICollectionView! //DelegateMethod func lblNameTapped(cell: MyCell) { let indexPath = self.collectionView.indexPathForCell(cell) print(indexPath!.row) } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! MyCell cell.delegate = self return cell } } 

Попробуй это :-

 -(void)buyNowClicked:(UITapGestureRecognizer*)tap { NSLog(@"buyNowClicked here"); [self buyService:tap.view.tag]; } 

Используйте этот код для жестов tap:

  UITapGestureRecognizer *buyNowTapped = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(buyNowClicked:)]; buyNowTapped.numberOfTapsRequired = 1.0; cell.buy.tag = indexPath.row; cell.buy.userInteractionEnabled = YES; [cell.buy addGestureRecognizer:buyNowTapped]; Try this : -(void)buyNowClicked : :(UITapGestureRecognizer*)recognizer { UIView *view = [recognizer view]; NSLog(@"tag %ld",(long)view.tag); UIButton *button; UILabel *label; if([view isKindOfClass:[UIButton class]]) { button = (UIButton *)sender; [self buyService:button.tag]; } else if ([view isKindOfClass:[UILabel class]]) { label = (UILabel *)sender; [self buyService:label.tag]; } } 
  • Как реализовать UITapGestureRecognizer в моем приложении
  • Жмите жестом с движением пальца
  • как узнать, был ли UITapGestureRecognizer добавлен в subview
  • Swift: как сделать UILabel доступным?
  • hitTest: WithEvent и Subviews
  • Вызов URL-адреса не работает в TTTAttributedLabel, в то время как в его супервизоре есть UITapGestureRecognizer
  • UITapGestureRecognizer не срабатывает после поворота
  • Обнаружение касания UIImageView IOS
  • Добавить UITapGestureRecognizer в UITextView без блокировки textView touch
  • UITapGestureRecognizer работает с UIImageView, но не на UILabel
  • Как нажать для увеличения и двойного нажатия, чтобы уменьшить масштаб в iOS?
  • Interesting Posts

    Изменение угла перспективы справа налево, в iOS CATransformLayer с использованием CATransform3D

    Создать собственный пользовательский компонент / библиотеку

    UIReferenceLibraryViewController hasDictionaryDefinition работает только в Simulator на iPhone 5s

    Безопасный способ сохранения ключей шифрования в iOS

    Просто ли вытащить всех пользователей из базы данных firebase и эффективно использовать их в массиве?

    Почему UIScrollView приостанавливает мой CADisplayLink?

    Метаданные вращения видео Mp4

    Как цифровой подписью PDF с использованием данных сертификата X.509 из приложения iOS

    Предотвращение поворота и масштабирования MPMoviePlayerController на портрет при полноэкранном режиме

    Как установить приложение из TestFlight через itunesconnect в качестве внутреннего тестера в ios?

    Уведомление о включении устройства iOS

    Родительский UIView не изменяет размер после ограничения. Константа на UILabel изменена

    FBSDKLog отсутствует разрешение

    Управление версиями Core Data и миграция с помощью настраиваемой политики

    Не удается запустить iPhone-симулятор – файл «Журналы» не удалось сохранить

    Давайте будем гением компьютера.