drawRect non chiamato per la sottoclasse UIButton personalizzata quando evidenziato

StackOverflow https://stackoverflow.com/questions/823524

  •  05-07-2019
  •  | 
  •  

Domanda

Quando si utilizza drawRect per una sottoclasse UIButton personalizzata, non viene mai chiamato per disegnare il pulsante quando evidenziato. Devo chiamare setNeedsDisplay per il mio pulsante nei miei eventi touch?

È stato utile?

Soluzione

Per quanto ne so, non esiste un modo semplice per sottoclassare UIButton.

UIButton non è il tipo di classe effettivo restituito dagli inizializzatori. UIButton è una specie di facciata per una serie di lezioni private.

Supponi di avere:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
NSLog(@"myButton type: %@", [myButton description]);

Troverai che il tipo restituito nel registro sarà " UIRoundedRectButton " ;. Il problema è che dovresti aver esteso " UIRoundedRectButton " ;. Ciò non è possibile in quanto si tratta di una classe privata che viene restituita sempre e solo a UIButton.

In cima a questo " UIRoundedRectButton " non è l'unica classe restituita possibile, tutte private.

In altre parole, UIButton è stato costruito in un modo che non è adatto per essere esteso.

Altri suggerimenti

Ho trovato una soluzione semplice.

Basta aggiungere il seguente metodo alla sottoclasse UIButton:

-(void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    [self setNeedsDisplay];
}

Questo è tutto!

Ho avuto lo stesso problema e successo soddisfacente con quanto segue aggiunto alla mia sottoclasse UIButton

- (void)awakeFromNib {
    [self addTarget:self action:@selector(redraw) forControlEvents:UIControlEventAllEvents];
}

- (void)redraw {
    [self setNeedsDisplay];
    [self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top