2012-08-28 9 views
16

Próbuję podklasować UIButton, aby utworzyć "inteligentniejszy" przycisk, który zawiera logikę do obsługi zdarzenia kliknięcia.Podklasy UIButton do obsługi kliknięć

Jaki jest najlepszy sposób, aby to osiągnąć? Czy po prostu muszę zastąpić metodę onClick? Czy muszę zarejestrować program obsługi zdarzeń (a jeśli tak, to gdzie należy to zrobić, ponieważ istnieje wiele sposobów inicjowania UIButton?)

+0

Co znaczy "zdarzenie kliknięcia"? – dandan78

+1

http://stackoverflow.com/search?q=%2Bsubclass+%2Buibutton&submit=search – vikingosegundo

+0

@ dandan78 Chcę, aby mój przycisk wykonał jakąś akcję po kliknięciu. Chcę, żeby ta logika była zawarta w moim przycisku. Aby podać nieco więcej szczegółów, tworzę aplikację, w której każdy przycisk odtwarza dźwięk - dlatego chcę, aby każdy z moich przycisków obejmował także instancję AVAudioPlayer, która powinna być odtwarzana po kliknięciu przycisku. –

Odpowiedz

31

Myślę, że istnieją lepsze rozwiązania tego problemu niż proponowane przez ciebie , ale aby odpowiedzieć bezpośrednio na twoje pytanie: Podklasa UIButton obserwuje zdarzenia dotykowe w ten sam sposób, w jaki wszyscy inni obserwują zdarzenia dotykowe.

// In your UIButton subclass 

- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super buttonWithType:UIButtonTypeCustom]; 
    if (self) { 
     [self addTarget:self action:@selector(didTouchButton) forControlEvents:UIControlEventTouchUpInside]; 
    } 
    return self; 
} 

- (void)didTouchButton { 
    // do whatever you need to do here 
} 

Ważna uwaga: nie można użyć [UIButton buttonWithType:] aby utworzyć przycisk, musisz użyć init lub initWithFrame:. Mimo że UIButton ma inicjator wygody, initWithFrame: nadal jest wyznaczonym inicjatorem.

Powiązane problemy