Обработка сенсорного события в UILABEL и подключать его к Ibaction
-
02-10-2019 - |
Вопрос
Хорошо, так у меня есть UILabel
Создано в Interface Builder, который отображает какой-то текст по умолчанию «Нажмите, чтобы начать».
Когда пользователь нажал UILabel
Я хочу, чтобы это вызвать метод Ibaction:-(IBAction)next;
который обновляет текст на метке, чтобы сказать что-то новое.
Было бы действительно удобно, если это позволило мне просто перетащить соединение из моего метода на мою этикетку, а затем выберите коснуться внутри, как с помощью кнопки. Но увы, нет сигары.
Так что в любом случае, я думаю, мой вопрос, я собираюсь придеться подкласс UILabel
Чтобы сделать это на работу? Или есть какой-то способ, которым я могу перетащить кнопку на этикетку, но сделать его 0% непрозрачным. Или есть прощественное решение, которое мне не хватает?
Решение
Проверьте это:
UILabel *label = ...
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(labelTap)];
[label addGestureRecognizer:tapGesture];
Хитрость состоит в том, чтобы включить взаимодействие пользователя.
Другие советы
Уилабель наследует от UIView, который наследует от UIRESPONDER. Все объекты UIRESPONDER могут обрабатывать сенсорные события. Таким образом, в вашем классе файл, который знает о вашем представлении (который содержит UILabel) Alludher:
-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;
В интерфейсе Builder установите значение метки UILabel. Когда прикосновения происходят в вашем методе TouchesBegan, проверьте значение тега вида, к которому принадлежит тег:
UITouch *touch = [touches anyObject];
if(touch.view.tag == MY_TAG_VAL)
label.text = @"new text";
Вы подключаете свой код в своем файле классов с объектом UILABEL в Interface Builder, объявив вашу переменную экземпляра UILabel с префиксом IBOUTLET:
IBOutlet UILabel *label;
Затем в интерфейсе Builder вы можете подключить их.
Вы можете использовать Uibutton, сделать его прозрачным, т.е. пользовательским типом без изображения и добавить на него UILabel (Centered). Затем проворачивайте обычные события кнопки.
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
}