2010-03-17 11 views
10

Come si imposta un tag per un pulsante a livello di codice?Come posso impostare e ottenere il tag UIButtons?

poi voglio mettere a confronto ai tag per una conclusione

Ive ha provato questa

-(IBAction)buttonPressed:(id)sender{ 
NSLog(@"%d", [sender tag]); 
} 

ma che appena si blocca l'applicazione .... :(

altre idee?

Cheers Guys

Sam

risposta

13

È necessario lanciare mittente come UIButton:

-(IBAction)buttonPressed:(id)sender{ 
UIButton *button = (UIButton *)sender; 
NSLog(@"%d", [button tag]); 
} 

Edit: Per quanto riguarda il messaggio "di selezione non riconosciuto" ...

Sulla base del messaggio di errore, non è in grado di chiamare il metodo buttonPressed in il primo posto. Si noti nel messaggio di errore che sta cercando "buttonPressed" (nessun colon alla fine) ma il metodo è denominato "buttonPressed:". Se stai impostando il pulsante target in codice, assicurati che il selettore sia impostato su buttonPressed: invece di solo buttonPressed. Se si imposta la destinazione in IB, lo xib potrebbe non essere sincronizzato con il codice.

Inoltre, il codice originale "[tag mittente]" dovrebbe funzionare ma per accedere alle proprietà specifiche del pulsante, sarà comunque necessario eseguire il cast in UIButton.

+0

blocca ancora ... :( –

+0

2010-03-17 16: 07: 35,322 Memoria [37490: 207] *** - [MemoryViewController buttonPressed]: selettore non riconosciuto inviato ad esempio 0x3b08cb0 2010-03-17 16: 07: 35.324 Memoria [37490: 207] *** Termine dell'app a causa dell'eccezione non rilevata 'NSInvalidArgumentException', motivo: '*** - [Pulsante MemoryViewControllerPremuto]: selettore non riconosciuto inviato all'istanza 0x3b08cb0' stack .... –

+1

[tag button] dovrebbe funzionare.Si prega di vedere le modifiche alla risposta – DyingCactus

5

So che questa è una vecchia domanda e mi è stata data risposta molte volte in altre domande, ma è arrivata in una ricerca su Google come seconda dalla parte superiore. Quindi, ecco la risposta al motivo per cui si è verificato un arresto anomalo. Cambiarlo in "button.tag"

-(void)myMethod 
{ 
    UIButton *theButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [theButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown]; 

    theButton.tag = i;//or whatever value you want. In my case it was in a forloop 

} 

-(void)buttonPressed:(id)sender 
{ 
    UIButton *button = (UIButton *)sender; 
    NSLog(@"%d", button.tag); 
} 
+0

Funziona! Ma è strano che [tag tag] crash! Non è [] più nativo confrontare con notazione? – sooon

+0

@ sooon: button.tag è implementato internamente come [pulsante gettag] e [button setTag:]. Poiché non esiste in realtà una funzione "tag", si blocca. – prewett

-1

Non c'è bisogno di casting. Questo dovrebbe funzionare:

-(IBAction)buttonPressed:(UIButton*)sender 
{ 
NSLog(@"%d", [sender tag]); 
} 
Problemi correlati