Ich habe die oft diskutierte drawRect nicht immer aufgerufen. Ich habe durch viele Beiträge gewesen, aber nicht mein Problem behoben haben.
Die Lösung wird oft als Aufruf beschrieben -setNeedsDisplay
. Die Antwort auf die Frage setNeedsDisplay ruft drawRect nicht auf zeigt an, dass der Aufruf in der Unteransicht nicht self
.
Ich habe eine Unteransicht erstellt, um auf eine Schaltfläche zu zeichnen. Die Schaltfläche ist ausgewählt.
- (IBAction) selected1:(id)sender {
NSLog(@"selected1");
UIButton *button = (UIButton *)sender;
[button setTitle:@"Chosen1" forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateDisabled];
// UsableMark *um = [[UsableMark alloc] init ]; // Original
// UsableMark *um = [[UsableMark alloc] initWithFrame:button.frame]; // 1st fix
CGRect umFrame = CGRectMake(0,0,button.frame.size.width,button.frame.size.height); // 2nd fix
UsableMark *um = [[UsableMark alloc] initWithFrame:umFrame ]; // 2nd fix
[button addSubview:um];
[um setNeedsDisplay];
[um release];
button.enabled = NO;
NSLog(@"finished selected1");
}
Ein drawRect-Aufruf in UsableMark wird nicht ausgelöst.
Ersetzen der [um setNeedsDisplay]
con [button setNeedsDisplay]
löst keinen drawRect-Aufruf aus.
Ein Versuch der Nutzung self
schlägt fehl, weil die Methode selected1 eine Klasse vom Typ UIApplicaitonDelegate ist. Die Methode -setNeedsDisplay wird nicht gefunden.
Versuchen Sie [self.window setNeedsDisplay]
bringt keinen Fortschritt.
Direktes Aufrufen von drawRect (was man nicht tun möchte) CGRect rect = button.frame; [um drawRect:rect];
zeigt, dass die Methode vorhanden ist, ist die Protokollierung aktiv.
Die Lösung mag einfach sein, aber sie entzieht sich mir.