Как обработать сенсорное событие на UILabel как подпредставление UITableViewCell? - PullRequest
8 голосов
/ 15 августа 2011

Мое приложение имеет пользовательский UITableView. В методе делегата cellForRowAtIndexPath его UIViewController я создаю экземпляры пользовательских UITableViewCell объектов, которые содержат несколько пользовательских UILabels (фактически подкласс OHAttributedLabel) в качестве подпредставлений представления содержимого.

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

Идеи

Спасибо

Ответы [ 6 ]

13 голосов
/ 15 августа 2011
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
      UITouch *touch = [[event allTouches] anyObject];
      if (CGRectContainsPoint([self.site frame], [touch locationInView:self.view])){
       //do whatever you want
     }
}

Или

UILabel *label = =[UILabel alloc]init];
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
[[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap)]     autorelease];
[label addGestureRecognizer:tapGesture];
1 голос
/ 15 марта 2013

Проблема в OHAttributedLabel.Этот ярлык также обрабатывает нажатие на ссылки.Поэтому для ручного нажатия на любую точку ярлыка (не просто ссылку) вы должны

self.textLabel.onlyCatchTouchesOnLinks = NO;

, где self.textLabel - это ваша OHAttributedLabel.И не забудьте о userInteractionEnabled.

1 голос
/ 15 августа 2011

UILabel не является UIControl, поэтому вы не будете получать события для UIControlEventTouchUpInside или аналогичного.Почему бы не использовать кнопку вместо этого?Вы можете сделать так, чтобы он выглядел точно так же, как метка.

Независимо от того, что вам, вероятно, нужно будет установить addTarget: action: forControlEvents: и тег на UIButton в вашем cellForRowAtIndexPath: метод.В этом методе определите, какая кнопка ячейки была нажата, изучив значение тега.

Если вам необходимо использовать UILabel, вам нужно создать его подкласс и перехватить методы touchesBegan / touchesEnded (унаследованные от UIResponder), чтобы обнаружить UIControlEventTouchUpInside самостоятельно.

0 голосов
/ 10 декабря 2013

вы можете использовать TTTAttributedLabel вместо этого. это очень просто. когда вы инициализируете UITableViewCell, вы можете делегировать: TTTAttributedLabelDelegate как:

@interface MyTableViewCell : UITableViewCell<TTTAttributedLabelDelegate>{
    UILabel *nameLabel;
    TTTAttributedLabel *valueLabel;
}

Когда вы начнете, вы можете добавить ссылку на ярлык:

 [valueLabel addLinkToPhoneNumber:valueStr withRange:NSMakeRange(0, valueStr.length)];

так что вы можете делать все, что захотите:

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithPhoneNumber:(NSString *)phoneNumber{
   //do anything you want.

}
0 голосов
/ 20 мая 2013

У меня просто была проблема с использованием статических ячеек таблицы для таблицы настроек, где я хотел, чтобы вся ячейка вызывала первый респондент для текстового поля ячейки.

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

Немного некрасиво. С другой стороны, он просто описывает область позади текстового поля, реагирующую на прикосновение. Что было намерением в конце концов. Так что, может быть, это не так уж и необычно.

Сохраню, пока не найду причину, по которой распознаватели не стреляют.

0 голосов
/ 24 ноября 2012

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

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