Кнопка не работает в подклассе UITableViewCell, когда она является подвидом представления внутри UITableViewCell - PullRequest
4 голосов
/ 14 февраля 2012

У меня есть кнопка в ячейке tableView, которая мне нужна для реагирования на сенсорные события. Обычно это легко можно решить с помощью

    [cell.playButton addTarget:self action:@selector(playButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

внутри -tableView: cellForRowAtIndexPath:

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

например:

    UIView *view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    self.theView = view;
    [self addSubview:view];
    [view release];


    UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom];
    playButton.frame = CGRectMake(5, 5, 100, 30);
    [playButton setImage:[UIImage imageNamed:@"button_playvid.png"] forState:UIControlStateNormal];
    [playButton setImage:[UIImage imageNamed:@"button_playvid_active.png"] forState:UIControlStateHighlighted];
    self.playButton = playButton;
    [self.theView addSubview:playButton];

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

Спасибо

Joel

PS. Я понимаю, что, вероятно, нет практической причины для создания фонового представления в точности, как это, так как оно уже есть. Это просто пример кода, который я использую, чтобы объяснить возникшую проблему ..: D

Спасибо за поиск!

Ответы [ 3 ]

9 голосов
/ 14 февраля 2012

UIView, который вы добавляете, на самом деле является UIImageView. Из документов:

Новые объекты просмотра изображений по умолчанию настроены на игнорирование пользовательских событий. Если вы хотите обрабатывать события в пользовательском подклассе UIImageView, вы должны явно изменить значение свойства userInteractionEnabled на YES после инициализации объекта.

Я думаю, что либо userInteractionEnabled каскадирует к подпредставлениям, либо суперпредставление в этом случае не передаст касание своим подпредставлениям, поэтому ваша кнопка не будет получать касания. Установите для вида изображения значение .userInteractionEnabled = YES, и все будет в порядке.

1 голос
/ 08 сентября 2013

У меня была такая же проблема и пробовал ВСЕ.В конечном итоге он реализовал метод

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

Просто верните любую высоту вашей пользовательской ячейки (посмотрите в файле NIB)

0 голосов
/ 25 мая 2015

Вместо кнопки вы можете попробовать то же самое с изображением.Вы можете определить, какой метод вызывать при нажатии на изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...