redibujar UIButton cuando se presiona

Estoy usando paintcodeapp para dibujar mi botón personalizado. He dibujado dos estados diferentes "presionado" y "normal"

Necesito llamar a setNeedsDisplay cuando el botón está en "estado presionado"

Luego envío los dos sorteos usando self.highlighted en la drawRect: Método

Lo he intentado con:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventTouchDown];
        [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventTouchUpInside];
        [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlStateNormal];

    }
    return self;
}

-(void)didDetectEvent:(id)sender {
    [self setNeedsDisplay];
}

pero no funciona ¿cualquier sugerencia?

preguntado el 03 de mayo de 12 a las 14:05

3 Respuestas

Tuve este mismo problema (usando Swift). Necesito configurar el fondo y hacer que se muestre de inmediato, incluso si ralentiza la interfaz de usuario para el usuario. La solución es asegurarse de que se haga en el hilo principal.

dispatch_async(dispatch_get_main_queue(), {
   testButton?.backgroundColor = .greenColor()
})

respondido 12 mar '16, 20:03

Prueba con:

-(void)didDetectEvent:(id)sender {
    UIButton *btn = (UIButton *)sender;
    [btn setNeedsDisplay];
}

Supuse que está implementado en una vista genérica que tiene el botón que desea administrar.

contestado el 03 de mayo de 12 a las 14:05

También tuve que llamar a setNeedsDisplay después de un retraso de 0.2 segundos. Publicaré el código en otra respuesta: Luka

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

        [self addTarget:self action:@selector(didDetectEvent:) forControlEvents:UIControlEventAllTouchEvents];
    }
}


  -(void)didDetectEvent:(id)sender {
        [self setNeedsDisplay];
        [self performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0.2];
}

esto funciona. No estoy completamente seguro de que esta sea la mejor solución.

contestado el 04 de mayo de 12 a las 09:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.