Подтвердить что ты не робот

Обработка события Touch в UILabel и подключение его к IBAction

Хорошо, поэтому у меня есть UILabel, созданный в конструкторе интерфейса, который отображает некоторый текст по умолчанию "tap to begin".

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

Так или иначе, я думаю, мой вопрос: мне придется подклассом UILabel заставить это работать? Или можно каким-то образом перетащить кнопку над меткой, но сделать ее непрозрачной. Или есть более простое решение, которое мне не хватает?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

UITouch *touch = [touches anyObject];

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

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

IBOutlet UILabel *label;

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

Ответ 3

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

Ответ 4

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
}