UILabel: Usando o método userInteractionEnabled em uma etiqueta
-
03-07-2019 - |
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!
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");
}
}