drawRect não chamado para o costume de UIButton subclasse quando destacada
Pergunta
Ao usar drawRect para um costume UIButton subclasse, nunca parece ter chamado para desenhar o botão em destaque. Eu preciso chamar setNeedsDisplay para meu botão em meus eventos de toque?
Solução
Tanto quanto eu posso dizer não há nenhuma maneira para a frente a subclasse UIButton.
UIButton não é o tipo de classe real que é devolvido pelos initializers. UIButton é uma espécie de frente para uma série de aulas particulares.
dizer que você tinha:
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSLog(@"myButton type: %@", [myButton description]);
Você vai encontrar o tipo retornado no log para ser "UIRoundedRectButton". O problema com isso é que você precisa para ter estendido "UIRoundedRectButton". Isso não é possível, pois é uma classe privada, que é sempre apenas voltou a UIButton.
Em cima disso "UIRoundedRectButton" não é a única possível classe voltou todos os quais são privados.
Em outras palavras UIButton foi construída em forma que não é adequado para ser estendido.
Outras dicas
Eu encontrei uma solução fácil.
Basta adicionar o seguinte método para o seu UIButton subclasse:
-(void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
[self setNeedsDisplay];
}
É isso aí!
Eu tive o mesmo problema e sucesso satisfação com os seguintes adicionado ao meu UIButton
subclasse
- (void)awakeFromNib {
[self addTarget:self action:@selector(redraw) forControlEvents:UIControlEventAllEvents];
}
- (void)redraw {
[self setNeedsDisplay];
[self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}