drawRect nicht für benutzerdefinierte UIButton Unterklasse aufgerufen, wenn hervorgehoben

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

  •  05-07-2019
  •  | 
  •  

Frage

Wenn drawRect für eine benutzerdefinierte UIButton Unterklasse verwenden, es scheint nie den Knopf zu ziehen, wenn hervorgehoben genannt zu werden. Benötige ich setNeedsDisplay für meine Button in meinem Touch-Ereignisse nennen?

War es hilfreich?

Lösung

Soweit ich es beurteilen kann nicht geradlinig Weg ist UIButton Unterklasse.

UIButton ist nicht der tatsächliche Klassentyp, der von den initializers zurückgeführt wird. UIButton ist ein bisschen eine Front für eine Reihe von Privatunterricht.

Angenommen, Sie haben:

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

Sie werden den Typen im Protokoll zurückgegeben finden „UIRoundedRectButton“ zu sein. Das Problem mit diesem ist, dass Sie erweitert haben müssten „UIRoundedRectButton“. Das ist nicht möglich, da es sich um eine private Klasse, die zu UIButton immer nur zurückgeführt wird.

Hinzu kommt, dass „UIRoundedRectButton“ ist nicht die einzige mögliche zurück Klasse alle davon sind privat.

Mit anderen Worten UIButton wurde in Art und Weise aufgebaut, die nicht verlängert werden soll, geeignet ist.

Andere Tipps

Ich fand eine einfache Lösung.

Fügen Sie einfach die folgende Methode zu Ihrer UIButton Unterklasse:

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

Das ist es!

Ich hatte das gleiche Problem und befriedigenden Erfolg mit dem meiner UIButton Unterklasse hinzugefügt folgenden

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

- (void)redraw {
    [self setNeedsDisplay];
    [self performSelector:@selector(setNeedsDisplay) withObject:self afterDelay:0.15];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top