2009-05-23 12 views
25

Creo un pulsante e imposta il titolo come "Fai clic qui". Quando premo quel pulsante voglio ottenere il titolo del pulsante e registrarlo. Ecco il mio codice, dove sto andando male?Ottenere il titolo di UIButton nel gestore di eventi

-(void)clicketbutton { 
    UIButton *mybutton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [mybutton setTitle:@"Click here" forState:UIControlStateNormal]; 
    [mybutton addTarget:self 
     action:@selector(displayvalue:)forControlEvents:UIControlEventTouchUpInside]; 
} 

-(void)displayvalue:(id)sender {  
    UIButton *resultebutton= [UIButton buttonWithType:UIButtonTypeCustom]; 

    resultebutton=sender;// pls clear here.. my question here , it it possible or not. if possible how ? 
    NSLog(@" The buttontitile is %@ ", [resultebutton.Title] // here also. 
} 

risposta

72

tuo DisplayValue: metodo dovrebbe essere simile a questa:

-(void)displayvalue:(id)sender {  
    UIButton *resultButton = (UIButton *)sender; 
    NSLog(@" The button's title is %@.", resultButton.currentTitle); 
} 

(. Si prega di verificare la documentazione in XCode, avrebbe dato la risposta giusta)

+1

ottime applausi –

13
-(void)displayvalue:(id)sender 
{ 
    UIButton *resultebutton= (UIButton*)sender; 
    NSLog(@"The button title is %@ ", resultebutton.titleLabel.text); 
} 
1
-(void)clicketbutton { 
    UIButton *mybutton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [mybutton setTitle:@"Click here" forState:UIControlStateNormal]; 
    [mybutton addTarget:self 
     action:@selector(displayvalue:)forControlEvents:UIControlEventTouchUpInside]; 
} 
-(void)displayvalue:(id)sender {  

    NSLog(@"The title is %@ ", [mybutton titleForState:UIControlStateNormal]); 

} 
+1

Io non credo che questo funzionerà affatto. Perché funzioni 'mybutton' deve essere una variabile di istanza, ma poi devi anche assegnare il pulsante alla variabile di istanza in' -clicketbutton' - attualmente quel metodo sta usando una variabile locale. In altre parole, 'mybutton' rappresenta cose diverse nei due metodi. –

+0

@ ThomasMüller corretto. La variabile 'myButton' non rientra nell'ambito di displayValue: function. Ciò funzionerebbe, tuttavia, se usassero 'sender' come ricevitore piuttosto che' myButton' – mylogon

3

So che è un po 'una vecchia domanda, ma questo è probabilmente il modo migliore per risolvere questo.

NSLog(@"The button title is: %@", [sender currentTitle]);   

Modifica
Ho appena capito che questo dipende dal fatto che si è impostato il parametro di ricezione per UIButton*. Anziché utilizzare l'impostazione predefinita id, creare un oggetto UIButton e eseguire il casting di (id)sender su tale pulsante. Tagliare fuori l'uomo medio e sufficiente impostare la firma funzione per

-(void)buttonPressed:(UIButton*)sender{ 
    NSLog(@"Button title: %@",sender.currentTitle); 
} 

Questo è efficace getto del parametro della funzione

Problemi correlati