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?

Foi útil?

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];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top