2011-01-12 8 views
0

Ich habe eine Basisanwendung erstellt, eine untergeordnete NSView erstellt und sie als benutzerdefinierte Ansicht im Interface Builder hinzugefügt. Alles funktioniert gut.NSProgressIndicator Probleme - vielleicht meine NSView-Unterklasse?

Allerdings funktionieren bestimmte Dinge nicht richtig, was mich fragt, ob mein NSView richtig unterklassifiziert ist? Genauer gesagt kann ich, wenn ich einen NSProgressIndicator verwende, startAnimating: und stopAnimate auf unbestimmte Weise verwenden, aber wenn ich etwas mit einem bestimmten incrementBy versuche und mache, tut das nichts.

Auch wenn ich den Standardwert des bestimmten NSProgressIndicator auf 50.0 festlegen, erscheint es, wenn die App bei 0.0 gestartet wird, obwohl in IB gut aussieht.

Mein NSProgressIndicator ist korrekt als IBOutlet angeschlossen, ich kann sagen, dass er es verstecken soll, kann es überhaupt nicht animieren. Ich habe jedoch auch andere Probleme, die mich denken lassen, dass dieses Problem tatsächlich meine NSView-Unterklasse ist (z. B. Quick Look nicht feuern).

In meiner Unterklasse habe ich einfach die Methoden initWithFrame: und drawRect außer Kraft gesetzt und ihre [super] aufgerufen. Wie ich bereits sagte, habe ich dies als benutzerdefinierte Ansicht im Interface Builder platziert und in MyCustomView geändert. Alles funktioniert gut, meist ...?

Bin ich falsch Unterklasse, oder nicht etwas in Interface Builder richtig tun? Ich vermisse etwas Kleines ?!

Antwort

0

Sie müssen initWithFrame überschreiben :, nicht init. Das ist wahrscheinlich das Problem.

Eine weitere Sache, die Sie mit Fortschrittsanzeigen beachten sollten: Wenn Sie viel Arbeit machen, sollten Sie die nächste Ausführungsschleife verzögern, damit der Fortschrittsanzeiger aktualisiert wird. Verwenden Sie verzögerte Performances (performSelector: withObject: afterDelay :) oder etwas ähnliches, damit die Benutzeroberfläche aktualisiert werden kann.

+0

Danke, sorry, ich mache initWithFrame ... Könnte es sein, weil ich durch .xib geladen werde und wakeFromNib übertreiben muss? – mootymoots

1

Gelöst es.

ich tat zunächst die folgenden in meinem awakeFromNib Methode:

- (void)awakeFromNib{ 
    [super awakeFromNib]; 
} 

Es stellte sich heraus, awakeFromNib sollte Super nicht anrufen, wenn sie direkt unter einem NSView ist. Das Entfernen von Super hat das Problem behoben.

Verwandte Themen