2012-08-28 44 views
16

Estoy tratando de crear una subclase de UIButton para crear un botón "inteligente" que contenga la lógica para manejar el evento de clic.Subclase de UIButton para manejar los clics

¿Cuál es la mejor manera de lograr esto? ¿Simplemente necesito anular un método onClick? ¿O debo registrar un controlador de eventos (y si es así, dónde debo hacer esto ya que hay muchas maneras de iniciar un UIButton?)

+0

¿Qué quiere decir con 'click event'? – dandan78

+1

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

+0

@dandan78 Quiero que mi botón realice alguna acción cuando se presiona. Quiero que esta lógica esté contenida dentro de mi botón. Para proporcionar un poco más de detalle, estoy creando una aplicación donde cada botón reproduce un sonido, por lo que quiero que cada uno de mis botones también encapsule una instancia de AVAudioPlayer, que debería reproducirse cuando se hace clic en el botón. –

Respuesta

31

Creo que hay mejores soluciones para este problema que las que ha propuesto , pero para responder a su pregunta directamente: una subclase de UIButton observa los eventos táctiles de la misma manera que todos los demás observan los eventos táctiles.

// 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: no se puede utilizar para crear su [UIButton buttonWithType:] botón, usted tiene que utilizar init o initWithFrame:. Aunque UIButton tiene el inicializador de conveniencia, initWithFrame: sigue siendo el inicializador designado.

Cuestiones relacionadas