не может щелкнуть UIButton внутри ячейки в UITableview

искали уже некоторые возможные исправления, но все не решали мои.

Я продолжаю нажимать на ячейку в uitableview, а не на кнопках внутри нее.

вот мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } cell.backgroundColor = [UIColor blackColor]; UIView *v = nil; NSArray *array = [cell subviews]; for (v in array) { NSLog(@"%@",[v class]); if( [v isKindOfClass:[UIView class]] ){ [v removeFromSuperview]; } } //tb if (tableView == self.tb) { v = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.tb.bounds.size.width, 120.0)]; if([feeds count]>0){ UIImageView *box=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"statusBox.png"]]; box.userInteractionEnabled = YES; [v addSubview:box]; AsyncImageView *imageView1 = [[AsyncImageView alloc] initWithFrame:CGRectMake(10, 20.0f, 34.0f, 34.0f)]; imageView1.contentMode = UIViewContentModeScaleAspectFill; imageView1.clipsToBounds = YES; //cancel loading previous image for cell [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:imageView1]; if (users1 != nil && users1.imagelink != nil && (id) users1.imagelink != [NSNull null]){ imageView1.imageURL = [NSURL URLWithString:users1.imagelink]; } else{ imageView1.image=[UIImage imageNamed:@"default_ProfilePic.png"]; } UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myFunction:)]; tapped.numberOfTapsRequired = 1; [imageView1 addGestureRecognizer:tapped]; [tapped release]; imageView1.userInteractionEnabled = NO; [v addSubview:imageView1]; UIFont *font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:11]; UILabel *descLabel1 = [[UILabel alloc] initWithFrame: CGRectMake(52, 23, 160, 48)]; descLabel1.text = [NSString stringWithFormat:@"%@ %@",users1.userfirstn,users1.userlastn]; descLabel1.textColor = [UIColor blackColor]; descLabel1.font = font; descLabel1.adjustsFontSizeToFitWidth=YES; descLabel1.numberOfLines = 0; CGSize expectedLabelSize = [descLabel1.text sizeWithFont:descLabel1.font constrainedToSize:descLabel1.frame.size lineBreakMode:UILineBreakModeWordWrap]; CGRect newFrame = descLabel1.frame; newFrame.size.height = expectedLabelSize.height; descLabel1.frame = newFrame; descLabel1.numberOfLines = 0; descLabel1.userInteractionEnabled = NO; [v addSubview:descLabel1]; UILabel *descLabel2= [[UILabel alloc] initWithFrame: CGRectMake(52, 43, 200, 48)]; StatusClass *stat1=[feeds objectAtIndex:indexPath.row]; descLabel2.text = [stat1 statcreate]; descLabel2.textColor = [UIColor blackColor]; descLabel2.font = font; descLabel2.adjustsFontSizeToFitWidth=YES; descLabel2.numberOfLines = 0; CGSize expectedLabelSize2 = [descLabel2.text sizeWithFont:descLabel2.font constrainedToSize:descLabel2.frame.size lineBreakMode:UILineBreakModeWordWrap]; CGRect newFrame2 = descLabel2.frame; newFrame2.size.height = expectedLabelSize2.height; descLabel2.frame = newFrame2; descLabel2.numberOfLines = 0; descLabel2.userInteractionEnabled = NO; [v addSubview:descLabel2]; UILabel *descLabel3= [[UILabel alloc] initWithFrame: CGRectMake(10, 63, 280, 80)]; StatusClass *stat=[feeds objectAtIndex:indexPath.row]; descLabel3.text = [stat stattext]; descLabel3.textColor = [UIColor blackColor]; descLabel3.font = font; descLabel3.adjustsFontSizeToFitWidth=YES; descLabel3.numberOfLines = 0; descLabel3.userInteractionEnabled = NO; [v addSubview:descLabel3]; //comment button UIButton *buttonC = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [buttonC addTarget:self action:@selector(sendComment:) forControlEvents:UIControlEventTouchUpInside]; [buttonC setImage:[UIImage imageNamed:@"comment.png"] forState:UIControlStateNormal]; buttonC.frame = CGRectMake(2, 160, 145, 35); buttonC.userInteractionEnabled = YES; [v addSubview:buttonC]; //share button UIButton *buttonS = [UIButton buttonWithType:UIButtonTypeRoundedRect]; buttonS.tag = indexPath.row; [buttonS addTarget:self action:@selector(sendShare:) forControlEvents:UIControlEventTouchUpInside]; [buttonS setImage:[UIImage imageNamed:@"share.png"] forState:UIControlStateNormal]; buttonS.frame = CGRectMake(150, 160, 140, 35); buttonS.userInteractionEnabled = YES; [v addSubview:buttonS]; } v.userInteractionEnabled = YES; [cell addSubview:v]; } return cell; } 

Я также попробовал UITapGestureRecognizer для кнопок и все еще не работал.

Благодарю.

Я просто озадачен этим вопросом ….

Мне удалось решить эту проблему, выполнив это в одном проекте:

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("RegCell", forIndexPath: indexPath) as! CustomCell cell.contentView.userInteractionEnabled = false // <<-- the solution return cell } 

но то же самое не сработало для другого проекта. Я не имею понятия почему…

Существует еще одна потенциальная причина таких проблем, как это, и это UITableViewCells теперь имеет contentView . Это можно и будет размещать перед другими видами в ваших пользовательских ячейках табличного представления, чтобы подбирать штрихи и определять выбор ячейки. При этом он может блокировать прикосновения к любым видам за ним. Я особенно заметил это раздражение при создании ячеек с использованием перьев.

Принятое средство для решения этой проблемы заключается в обеспечении того, чтобы все подпункты были добавлены не к самой ячейке contentView , а к ее contentView . Это свойство только для чтения, которое при определенных обстоятельствах настраивает собственный кадр, например, когда он скользит сбоку, чтобы открыть кнопку удаления или в режиме редактирования. Поэтому вы должны убедиться, что все элементы, которые вы добавляете в contentView имеют разумный размер и имеют правильное поведение изменения размера.

Также имейте в contentView , что, добавляя ячейки в contentView , вы можете сами блокировать contentView к нему и тем самым препятствовать тому, чтобы ячейка была выбрана. Я лично стараюсь не разрешать выбор ячеек в табличных представлениях, содержащих ячейки с настраиваемыми пользовательскими элементами управления. Это только приводит к путанице и неудобным интерфейсам. На самом деле, я серьезно подумываю о замене всех UITableViews в моих будущих проектах на UICollectionViews , которые гораздо более адаптируемы.

-Ash

UITableViewCell обрабатывает все жесты по умолчанию. Set cell.selectionStyle = UITableViewCellSelectionStyleNone; чтобы отключить поведение по умолчанию.

Ваше UIButton = 'sy offset задано как 160, а высота UIView's задается как 120. Пожалуйста, измените UIButton's y UIButton's и попробуйте.

Я столкнулся с этой проблемой, но в моем случае это не было связано с табличным представлением, вместо этого это было потому, что я использовал subviews в моей кнопке, для которой userInteractionEnabled был истинным, установив это значение для false (NO) для всех userInteractionEnabled кнопки исправлено вопрос для меня.

Для Swift 3 и раскадровки

Для меня мне пришлось включить множественное касание внутри представления содержимого и включить взаимодействие с пользователем во всем: представление таблицы, ячейку таблицы, просмотр содержимого и UIButton. Я использовал раскадровку.

Я также создал свою ячейку tableview в качестве подкласса.

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

Создайте пользовательский UITableViewCell. См. Эту ссылку .

Скажем, у вас есть UIButton по имени displayButton, вы можете сделать что-то вроде этого:

Внутри вашего - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath после создания вашей ячейки,

 [cell.dislayButton addTarget: self action: @selector(replyButtonPressed:withEvent:) forControlEvents: UIControlEventTouchUpInside]; 

И создайте такой метод в вашем ViewController:

 - (void) replyButtonPressed: (id) sender withEvent: (UIEvent *) event { UITouch * touch = [[event allTouches] anyObject]; CGPoint location = [touch locationInView: self.tableView]; NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location]; } 
  • Как проверить, произошло ли нажатие на место в определенном месте
  • Как я могу обнаружить ответвления на определенной части (подстроке) UILabel?
  • UITapGestureRecognizer не работает для определенного массива
  • Добавление одиночного и двойного жестов к перехвату UITableViewCell
  • Сделать UIView перетаскиваемым пальцем
  • Как определить индивидуальный просмотр одного клика и двойного клика в iOS?
  • Обнаружение касания UIImageView IOS
  • UITapGestureRecognizer не срабатывает после поворота
  • Почему в shouldReceiveTouch мой распознаватель жестов всегда сообщает, что он прослушивается в том же месте?
  • Как распознать жест нажатия в подзонах
  • Добавить жест нажатия к части UILabel
  • Interesting Posts

    Кнопка «Назад» не отображается на нажатом UIViewController

    Фильтрация контактов спама truecaller (сохраняется с именем «Идентифицировано как спам») при импорте контактов из телефонной книги на ios

    Должен ли я объявлять переменные в интерфейсе или использовать свойство в объектной дуге?

    Обработать ошибку HTTP с помощью NSURLSession?

    Необъявленный идентификатор, предлагаемая вставка подчеркивания. Работает, но почему?

    viewDidLoad не работает (без NIB)

    MPMoviePlayerController – элементы управления не выровнены

    Как добавить UIToolbar в NavigationController на раскадровке?

    Навигационная панель UINavigationBar и UINavigationController имеет разные размытия

    Как сделать выбор на React Native?

    Зачем использовать async HTTP-запрос по синхронизации HTTP в отдельном потоке?

    Xamarin: Binding ios protocol / delegate не может получить доступ к перечислению, определенному в structs.cs

    Задержка метки названия UIButton

    Шаблон проектирования Objective-C для управления наблюдателями

    Xcode 4: Как изменить значение переменной $ {EXECUTABLE_NAME}?

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