iphone - Cuando se usa drawRect para la subclase UIButton
subclass (3)
Cuando utilizo drawRect para una subclase UIButton, parece que nunca me llaman para dibujar el botón cuando está iluminado. ¿Debo llamar a setNeedsDisplay para mi botón en mis eventos táctiles?
Por lo que puedo decir, no hay una forma directa de subclase UIButton.
UIButton no es el tipo de clase real que devuelve el inicializador. UIButton es una especie de fachada para una serie de clases privadas.
Digamos que tuviste:
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSLog(@"myButton type: %@", [myButton description]);
Encontrará que el tipo devuelto en el registro es "UIRoundedRectButton". El problema con eso es que necesitarías tener extendido "UIRoundedRectButton". Eso no es posible ya que es una clase privada que solo se devuelve a UIButton.
Además de eso, "UIRoundedRectButton" no es la única clase devuelta posible, todas las cuales son privadas.
En otras palabras, UIButton se construyó de una manera que no es adecuada para ser extendida.
Sé que es una vieja pregunta, pero me encontré con el mismo problema y encontré una solución fácil:
Simplemente agregue el siguiente método para UIButton Subclass:
-(void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
[self setNeedsDisplay];
}
¡Eso es!
Tuve el mismo problema y éxito satisfactorio con lo siguiente agregado a mi subclase UIButton
- (void)awakeFromNib {
[self addTarget:self action:@selector(redraw) forControlEvents:UIControlEventAllEvents];
}
- (void)redraw {
[self setNeedsDisplay];
[self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}