UILabel ( метка пользователя ):Использование метода userInteractionEnabled для метки

StackOverflow https://stackoverflow.com/questions/808679

Вопрос

Мне интересно, использовал ли кто-нибудь метод 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");
       }
   }     
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top