Ich baute eine UIButton-Unterklasse, die ein sehr einfaches Kontrollkästchen ist. Alles funktioniert (z. B. bekomme ich die erwarteten Ereignisse, die drawRect-Methode wird aufgerufen, wenn ich es erwarte, usw.), aber mein Bild wird nicht gezeichnet. Ich habe überprüft, dass mein Bild nicht null ist und dass meine Bilder unterschiedlich sind.Was ist los mit meiner Checkbox-Zeichnung?
Code:
-(void)awakeFromNib {
[super awakeFromNib];
[self addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
self.state=YES;
}
-(void) buttonClick {
self.state = !self.state;
[self setNeedsDisplay];
}
-(void)drawRect:(CGRect)rect {
UIImage *img = nil;
if (self.state) {
img = [self backgroundImageForState:UIControlStateSelected];
}
else {
img = [self backgroundImageForState:UIControlStateNormal];
}
[img drawInRect:rect];
}
den Wert von 'img' prüfen, bevor sie gezogen wird:
Printing description of img:
<UIImage: 0x52a710>
(gdb) continue
Printing description of img:
<UIImage: 0x52a5d0>
Die Hintergrundbilder werden in der NIB gesetzt. Wenn ich den ausgewählten Zustand in IB ändere, sehe ich das richtige Bild. Ich bekomme auch ein gültiges Bild von dem Anruf zurück (was ich nicht mache, wenn ich versuche, imageForState zu bekommen, was nicht in der NIB eingestellt ist).
Der Grund für die Unterklasse ist, dass ich ein Kontrollkästchen brauche. UIButton macht das nicht und UISwitch ist für alle außer den nützlichsten Ansichten hässlich.
Gedanken?
Danke.
tj
Edit: den gesamten Code für die Unterklasse hinzugefügt
I Details zu der Frage hinzugefügt oben über Ihren ersten Satz Fragen. Was ich im Simulator bekomme, ist das Standardbild, das ich in der NIB gesetzt habe. Ich denke, es kommt von, wenn die Checkbox zur NIB serialisiert wird, nicht von meinem Code. Ich habe den Code geändert, um mein eigenes Rect zu verwenden (das ist das gleiche, wie ich es bekommen habe), und es hat es nicht beeinflusst. Ich habe auch den ganzen Code hinzugefügt, damit Sie sehen können, warum die benutzerdefinierte Zeichnung. UIButton tut nicht, was ich tun muss. –
Ich bin offen für bessere Möglichkeiten, dies zu tun, BTW, wenn es nur etwas ist, das ich nicht kenne. Ich muss im Wesentlichen in der Lage sein, den "ausgewählten Zustand" beizubehalten, auch wenn der Benutzer nicht aktiv auf den Knopf klopft. –