2012-08-28 13 views
16

Sto provando a sottoclasse UIButton per creare un pulsante "più intelligente" che contenga la logica per la gestione dell'evento click.Sottoclasse UIButton per gestire i clic

Qual è il modo migliore per raggiungere questo obiettivo? Devo semplicemente sovrascrivere un metodo onClick? O devo registrare un gestore di eventi (e se sì, dove dovrebbe essere fatto visto che ci sono molti modi per avviare un UIButton?)

+0

Cosa intendete per "evento clic"? – dandan78

+1

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

+0

@ dandan78 Voglio che il mio pulsante esegua un'azione quando viene fatto clic. Voglio che questa logica sia contenuta nel mio pulsante. Per fornire ulteriori dettagli, creo un'applicazione in cui ogni pulsante riproduce un suono, quindi voglio che ciascuno dei miei pulsanti incapsuli un'istanza di AVAudioPlayer, che dovrebbe essere riprodotta quando si fa clic sul pulsante. –

risposta

31

Penso che ci siano soluzioni migliori a questo problema rispetto a quello che hai proposto , ma per rispondere direttamente alla domanda: una sottoclasse di UIButton osserva gli eventi di tocco nello stesso modo in cui tutti gli altri osservano gli eventi di tocco.

// 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 
} 

Nota importante: non è possibile utilizzare [UIButton buttonWithType:] per creare il pulsante, hai avuto modo di utilizzare init o initWithFrame:. Anche se UIButton ha l'inizializzatore di convenienza, initWithFrame: è ancora l'inizializzatore designato.

Problemi correlati