UILabel ( метка пользователя ):Использование метода userInteractionEnabled для метки
-
03-07-2019 - |
Вопрос
Мне интересно, использовал ли кто-нибудь метод userInteractionEnabled в UILabel, чтобы позволить метке действовать как кнопка (или просто запускать метод).Мы были бы очень признательны за любую помощь.Ваше здоровье!
Обновление (30.04.09 в 13:07) Разъяснение:У меня есть стандартная информационная кнопка, и рядом с ней я хочу разместить метку с текстом "настройки", и я бы хотел, чтобы метка функционировала как кнопка (которая переключается на экран настроек.Итак, по сути, мне нужно привязать уже определенный showSettinsView к метке "infoLabel";пользователь нажимает на информационную кнопку или информационную метку, и метод завершает работу.
Информационная кнопка уже работает и использует IBAction для запуска метода.Я хотел бы знать, как подключить метку для реализации того же метода.Вот и все.Ваше здоровье!
Решение
userInteractionEnabled
это не метод, а свойство.Но я думаю, вы захотите установить это значение в YES
чтобы позволить событиям дойти до UIView
супервизор.
Что вы, возможно, захотите сделать, так это переопределить touchesBegan:withEvent:
способ проведения UIView
который содержит ваш UIButton
и UILabel
подвиды.
В рамках этого метода проверьте, нет ли какого-либо из UITouch
прикосновения попадают за пределы UILabel
.
То есть, делает ли CGPoint
элемент [touch locationInView]
пересекаться с CGRect
элемент [infoLabel bounds]
?Посмотрите на эту функцию CGRectContainsPoint
чтобы запустить этот тест.
Если это так, то запустите NSNotification
это вызывает то же самое IBAction
селектор в качестве UIButton
.
Другие советы
Другим решением могло бы быть использование UIButton
с его типом, установленным на пользовательский, вместо UILabel
.Таким образом, ваша вторая кнопка будет выглядеть как UILabel
, и вы можете настроить его для запуска showSettingsView
способ.
Я согласен с Alex 30 апреля '09, и мое предложение - всего лишь дополнение к нему, если вы не хотите использовать UIButton.Способ, которым я решил эту проблему, заключался в создании UILabel через
- (id)initWithFrame:(CGRect)frame
{
label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)];
...
[label setUserInteractionEnabled: YES];
[self addSubview: label];
}
затем вы можете переопределить методы touchs *, такие как touchesBegan, touchesEnded, с помощью чего-то вроде
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
UITouch *touch = [touches anyObject];
if([touch view] == label) {
NSLog(@"I've been touched");
}
}