С UILabel
не является органом управления, вы не можете отправить сообщение -addTarget:action:forControlEvents:
. Вы должны удалить эту строку из приложения, поскольку ваш ярлык не является элементом управления и никогда не будет отвечать на это сообщение. Вместо этого, если вы хотите использовать этикетку, вы можете установить его интерактивным и добавить жест распознаватель к нему:
// label setup code omitted
UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(updateLabel:)];
[tempLabel setUserInteractionEnabled:YES];
[tempLabel addGestureRecognizer:tap];
[tap release]; // if not using ARC
обратного вызова для жеста распознаватель будет передан экземпляр жест распознаватель, который вызвал его, не управление, такое как сообщение о действии. Чтобы получить экземпляр ярлыка, вызвавшего событие, сообщите распознавателю распознанного жеста с -view
. Так что, если ваш метод updateLabel:
может быть реализован, как показано ниже:
- (void)updateLabel:(UIGestureRecognizer*)recognizer
{
// Only respond if we're in the ended state (similar to touchupinside)
if([recognizer state] == UIGestureRecognizerStateEnded) {
// the label that was tapped
UILabel* label = (UILabel*)[recognizer view];
// do things with your label
}
}
Кроме того, этот жест распознаватель будет вызывать метод действия с несколькими состояниями, аналогичным тем, которые содержатся в серии методов -touchesBegan:...
. Вы должны проверить, что вы выполняете только работу, в то время как распознаватель находится в соответствующем состоянии. Для вашего простого распознавателя жестов нажмите, вы, вероятно, только хотите работать, когда распознаватель находится в состоянии UIGestureRecognizerStateEnded
(см. Пример выше). Для получения дополнительной информации о распознавателях жестов см. Документацию для UIGestureRecognizer.
изменил 'userInteractionEnabled' и добавили пустой' touchesBegan' но приложение по-прежнему падает – Mahir
на другой таким образом вопрос, кто-то написал «Вы должны извлечь из UILabel и осуществлять UIResponder требует обработки сенсорной. «Я не совсем уверен, что делать, если – Mahir
@MahirE Это утверждение вводит в заблуждение как * all * views наследуется от' UIResponder'. С другой стороны, не все представления наследуются от 'UIControl'. –