Pergunta

Eu estou querendo saber se alguém tem usado o método userInteractionEnabled em uma UILabel para permitir que o rótulo para agir como um botão (ou apenas para disparar um método). Qualquer ajuda seria muito apreciada. Felicidades!

Update (4/30/09 @ 1: 7:00) Esclarecimento: Eu tenho um InfoButton padrão e ao lado dele eu quero colocar uma etiqueta com as "configurações" de texto e eu gostaria o rótulo de funcionar como o botão ( que vira um ecrã de opções Então, basicamente eu preciso amarrar o showSettinsView já definido para o rótulo de "infoLabel";.. que um usuário clica no infoButton ou infoLabel e os incêndios método off

O infoButton já está trabalhando e está usando uma IBAction para desencadear o método. Eu gostaria de saber como conectar-se a etiqueta para implementar o mesmo método. Isso é tudo. Felicidades!

Foi útil?

Solução

userInteractionEnabled não é um método, mas uma propriedade. Mas eu acho que você vai querer definir isso para YES para permitir eventos para chegar até o superview UIView.

O que você pode querer fazer é substituir o método touchesBegan:withEvent: do UIView que contém os UIButton e UILabel subviews.

Dentro deste método, teste se algum dos toques UITouch cair dentro dos limites da UILabel.

Isto é, faz o CGPoint elemento [touch locationInView] cruzam com com o elemento CGRect [infoLabel bounds]? Olhar para o CGRectContainsPoint função para executar este teste.

Se sim, então disparar uma NSNotification que chama o mesmo seletor IBAction como o UIButton.

Outras dicas

Outra solução poderia ser usar um UIButton com seu tipo conjunto com o costume, em vez de um UILabel. Desta forma, o segundo botão vai olhar como uma UILabel, e você pode configurá-lo para acionar o método showSettingsView.

Concordo com Alex Apr 30, '09 e minha proposta é apenas um complemento para ele, se você não quer ir com um UIButton. A maneira como eu resolvi que era criando um UILabel através

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

então você pode substituir os toques * métodos como touchesBegan, touchesEnded com algo como

- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
      UITouch *touch = [touches anyObject];
      if([touch view] == label) {
          NSLog(@"I've been touched");
       }
   }     
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top