2010-03-17 9 views
10

Jak ustawić programowo znacznik dla przycisku?Jak ustawić i uzyskać tag Uibuttons?

I później chcesz porównać tagów do wniosku

ive próbował to

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

ale to po prostu wywala aplikację .... :(

jakieś inne pomysły?

Pozdrawiam facetów:

Sam

Odpowiedz

13

Trzeba rzucić nadawcę jako UIButton:

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

Edit: Jeśli chodzi o komunikat „nierozpoznany selektor” ...

Na podstawie komunikatu o błędzie, że nie jest w stanie wywołać metodę buttonPressed w pierwsze miejsce. Zauważ w komunikacie o błędzie, że szuka "buttonPressed" (bez dwukropka na końcu), ale metoda nazywa się "buttonPressed:". Jeśli ustawiasz cel przycisku w kodzie, upewnij się, że selektor jest ustawiony na buttonPress: zamiast tylko buttonPressed. Jeśli ustawiasz cel w IB, xib może nie być zsynchronizowany z kodem.

Twój oryginalny kod "[tag nadawcy]" również powinien działać, ale aby uzyskać dostęp do właściwości specyficznych dla przycisku, musisz go przesłać do UIButton.

+0

ciągle wywala ... :( –

+0

2010-03-17 16: 07: 35.322 Pamięć [37490: 207] *** - [MemoryViewController buttonPressed]: nierozpoznany selektor wysyłane do instancji 0x3b08cb0 2010-03-17 16: 07: 35.324 Pamięć [37490: 207] *** Kończenie aplikacji z powodu nieprzechwyconego wyjątku "NSInvalidArgumentException", powód: "*** - [przycisk MemoryViewController naciśnięty]: nierozpoznany selektor wysłany do instancji 0x3b08cb0 ' stack ... –

+1

Powinien działać przycisk [button] Proszę zobaczyć zmiany w odpowiedzi – DyingCactus

5

Wiem, że jest to stare pytanie i wiele razy otrzymywałem odpowiedź na inne pytania, ale wyszło w wyszukiwarce Google jako drugie z góry. Oto odpowiedź na pytanie, dlaczego się zawiesił. Zmień go na "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

Działa! Ale to dziwne, że [tag przycisku] awarii! Czy to nie [] bardziej natywny porównać z. notation? – sooon

+0

@ sooon: button.tag jest wewnętrznie implementowany ed jako [przycisk getTag] i [button setTag:]. Ponieważ w rzeczywistości nie ma funkcji "tag", ulega awarii. – prewett

-1

Nie ma potrzeby odlewania. To powinno działać:

-(IBAction)buttonPressed:(UIButton*)sender 
{ 
NSLog(@"%d", [sender tag]); 
} 
Powiązane problemy