UILabel: utilizzo del metodo userInteractionEnabled su un'etichetta
-
03-07-2019 - |
Domanda
Mi chiedo se qualcuno abbia usato il metodo userInteractionEnabled su un UILabel per consentire all'etichetta di agire come un pulsante (o semplicemente per attivare un metodo). Qualsiasi aiuto sarebbe molto apprezzato. Cheers!
Aggiornamento (30/04/09 @ 1: 07pm) Chiarimento: ho un pulsante Info standard e accanto ad esso voglio posizionare un'etichetta con il testo "Impostazioni". e vorrei che l'etichetta funzionasse come il pulsante (che si sposta su una schermata delle impostazioni. Quindi, fondamentalmente, devo legare lo showSettinsView già definito all'etichetta "infoLabel", un utente fa clic sul pulsante info o infoLabel e sul metodo spara.
L'InfoButton funziona già e utilizza un'IBAction per attivare il metodo. Vorrei sapere come collegare l'etichetta per implementare lo stesso metodo. Questo è tutto. Cheers!
Soluzione
userInteractionEnabled
non è un metodo ma una proprietà. Ma penso che vorrai impostarlo su YES
per consentire agli eventi di passare alla superview UIView
.
Quello che potresti voler fare è ignorare il touchesBegan: withEvent:
del metodo UIView
che contiene il tuo UIButton
e UILabel
visualizzazioni secondarie.
Con questo metodo, verifica se qualcuno dei tocchi UITouch
rientra nei limiti di UILabel
.
Cioè, l'elemento CGPoint
[touch locationInView]
si interseca con l'elemento CGRect
[limiti infoLabel]
? Esamina la funzione CGRectContainsPoint
per eseguire questo test.
In tal caso, disattiva un NSNotification
che chiama lo stesso selettore IBAction
del UIButton
.
Altri suggerimenti
Un'altra soluzione potrebbe essere quella di utilizzare un UIButton
con il suo tipo impostato su personalizzato, anziché un UILabel
. In questo modo il tuo secondo pulsante sembrerà un UILabel
e puoi configurarlo per attivare il metodo showSettingsView
.
Sono d'accordo con Alex il 30 aprile '09 e la mia proposta è solo un'aggiunta, se non vuoi andare con un UIButton. Il modo in cui l'ho risolto è stato creando un UILabel tramite
- (id)initWithFrame:(CGRect)frame
{
label = [[UILabel alloc] initWithFrame: CGRectMake(5, 5, 20, 20)];
...
[label setUserInteractionEnabled: YES];
[self addSubview: label];
}
quindi puoi sovrascrivere i metodi tocchi * come tocchiBegan, tocchiEnded con qualcosa del tipo
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {
UITouch *touch = [touches anyObject];
if([touch view] == label) {
NSLog(@"I've been touched");
}
}