UILabel: использование метода userInteractionEnabled для метки - PullRequest
9 голосов
/ 30 апреля 2009

Мне интересно, использовал ли кто-нибудь метод userInteractionEnabled в UILabel, чтобы метка действовала как кнопка (или просто для запуска метода). Любая помощь будет принята с благодарностью. Ура!

Обновление (4/30/09 @ 1: 19:00) Пояснение: у меня есть стандартная информационная кнопка, рядом с которой я хочу разместить метку с текстом «настройки», и я бы хотел, чтобы метка функционировала подобно кнопке ( который переходит к экрану настроек. Таким образом, в основном мне нужно привязать уже определенный showSettinsView к метке «infoLabel», пользователь нажимает на infoButton или infoLabel, и метод запускается.

InfoButton уже работает и использует IBAction для запуска метода. Я хотел бы знать, как подключить метку для реализации того же метода. Это все. Ура! * * 1005

Ответы [ 3 ]

13 голосов
/ 01 мая 2009

userInteractionEnabled это не метод, а свойство. Но я думаю, что вы захотите установить это значение на YES, чтобы позволить событиям проходить к суперпредставлению UIView.

Возможно, вы захотите переопределить метод touchesBegan:withEvent: для UIView, который содержит ваши UIButton и UILabel подвиды.

В этом методе проверьте, попадает ли любое из прикосновений UITouch в пределы UILabel.

То есть пересекается ли элемент CGPoint [touch locationInView] с элементом CGRect [infoLabel bounds]? Просмотрите функцию CGRectContainsPoint для запуска этого теста.

Если это так, то включите NSNotification, который вызывает тот же селектор IBAction, что и UIButton.

7 голосов
/ 16 июня 2010

Другое решение может заключаться в использовании UIButton с типом, установленным в custom, вместо UILabel. Таким образом, ваша вторая кнопка будет выглядеть как UILabel, и вы можете настроить ее для запуска метода showSettingsView.

2 голосов
/ 24 апреля 2012

Я согласен с Алексом 30 апреля '09, и мое предложение является лишь дополнением к нему, если вы не хотите использовать UIButton. Я решил это путем создания UILabel через

- (id)initWithFrame:(CGRect)frame
{
    label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)];
    ...
    [label setUserInteractionEnabled: YES];
    [self addSubview: label];
}

тогда вы можете переопределить методы прикосновения *, такие как прикосновения, начинаются, касания закругляются чем-то вроде

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
      UITouch *touch = [touches anyObject];
      if([touch view] == label) {
          NSLog(@"I've been touched");
       }
   }     
...