Обработка сенсорного события в UILabel и подключение его к IBAction - PullRequest
99 голосов
/ 03 июля 2010

Хорошо, у меня в конструкторе интерфейсов есть UILabel, который отображает некоторый текст по умолчанию «нажмите, чтобы начать».

Когда пользователь нажимает UILabel, я хочу, чтобы он вызвал метод IBAction: -(IBAction)next;, который обновляет текст на этикетке, чтобы сказать что-то новое.
Было бы очень удобно, если бы это позволило мне просто перетащить соединение из моего метода на мою метку, а затем выбрать подправить внутри, как с помощью кнопки. но увы, сигары нет.

так или иначе, я предполагаю, что мой вопрос, я собираюсь подкласс UILabel, чтобы заставить это работать? Или есть какой-то способ, которым я могу перетащить кнопку на ярлык, но сделать его 0% непрозрачным. Или я упускаю более простое решение?

Ответы [ 4 ]

253 голосов
/ 15 июля 2011

Проверьте это:

UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
      [[UITapGestureRecognizer alloc] initWithTarget:self 
                                              action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];

Хитрость заключается в том, чтобы включить взаимодействие с пользователем.

70 голосов
/ 03 июля 2010

UILabel наследуется от UIView, который наследуется от UIResponder.Все объекты UIresponder могут обрабатывать сенсорные события.Итак, в вашем файле класса, который знает о вашем представлении (который содержит UIlabel), реализуйте:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;

В конструкторе интерфейса установите значение тега UILabel.когда касания происходят в вашем методе touchesBegan, проверьте значение тега представления, которому принадлежит тег:

UITouch *touch = [touches anyObject];

if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";

Вы связываете свой код в своем файле класса с объектом UILabel в конструкторе интерфейса, объявив свой экземпляр UILabelпеременная с префиксом IBOutlet:

IBOutlet UILabel *label;

Затем в конструкторе интерфейсов вы можете подключить их.

30 голосов
/ 03 июля 2010

Вы можете использовать UIButton, сделать его прозрачным, то есть пользовательский тип без изображения, и добавить на него UILabel (по центру). Затем подключите обычные события кнопки.

15 голосов
/ 13 июля 2017

Swift 3

У вас есть IBOutlet

@IBOutlet var label: UILabel!

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

label.isUserInteractionEnabled = true
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(userDidTapLabel(tapGestureRecognizer:)))
label.addGestureRecognizer(tapGesture)

И, наконец, обработайте кран

func userDidTapLabel(tapGestureRecognizer: UITapGestureRecognizer) {
  // Your code goes here
}
...