Обработка события Touch в UILabel и подключение его к IBAction
Хорошо, поэтому у меня есть UILabel
, созданный в конструкторе интерфейса, который отображает некоторый текст по умолчанию "tap to begin".
Когда пользователь удаляет UILabel
, я хочу, чтобы он вызывал метод IBAction:
-(IBAction)next;
, который обновляет текст на ярлыке, чтобы сказать что-то новое.
Было бы очень удобно, если бы это позволило мне просто перетащить соединение из моего метода на мой ярлык, а затем выбрать подправить внутри, как с помощью кнопки. но, увы, нет сигары.
Так или иначе, я думаю, мой вопрос: мне придется подклассом UILabel
заставить это работать? Или можно каким-то образом перетащить кнопку над меткой, но сделать ее непрозрачной. Или есть более простое решение, которое мне не хватает?
Ответы
Ответ 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
}