Frage

Ich habe eine Unterklasse von NSView erstellt ein Bild als Muster zu zeichnen:

@interface CePatternView : NSView
{
    NSImage*    image;
    id      observableObjectForImage;
    NSString*   keyPathForImage;
}

@end

Ich implementiert die folgenden Bindungen zu belichten:

+ (void)initialize
{
    // Expose the "image" binding to IB.
    [self exposeBinding:@"image"];  
}

- (Class)valueClassForBinding:(NSString *)binding
{
    if([binding isEqualToString:@"image"])
        return [NSImage class];
    return nil; // Unknown binding
}

Leider ist die Bild Bindung in Interface Builder nicht angezeigt.

Muß ich wirklich eine IBPlugin schaffen Bindungen im Interface Builder zu entlarven? Das scheint einfach Art und Weise übertrieben für eine benutzerdefinierte Ansicht, die ich nicht planen, wieder zu verwenden.

War es hilfreich?

Lösung

Antwort Titel: Nein, können Sie eine benutzerdefinierte Ansicht ohne IB-Plug-in binden (indem sie sie in Code tun)
. Antwort in Frage Körper in Frage zu stellen. Ja, Sie brauchen eine IB-Plug-in der Bindung in IB zu belichten

Ihr Code nicht innerhalb Interface Builder ausgeführt werden, wenn Sie es in Interface Builder setzen, und dass exposeBinding: Nachricht ist Ihr Code. Daher müssen Sie es in Interface Builder setzen. Das bedeutet eine IB-Plug-in zu schreiben.

Auch IB-Plug-Ins sind nicht die gleichen wie die alten IB Paletten. Plug-Ins erfordern IB 3 und sind viel einfacher zu erstellen. Palettes erfordert IB 2 und war schmerzhaft zu erstellen.

Andere Tipps

I gebunden einfach mein Controller-Objekt meiner Ansicht Objekt eine andere Standardbindung (sagen wir, toolTip) verwendet wird, dann bearbeitet die XIB-Datei die XML manuell mit einem Texteditor und geändert werden.

Danach wird die Bindung funktioniert einwandfrei und auch korrekt im Interface Builder zeigt bis zu booten!

Nein, können Sie die Methode verwenden,

bind:toObject:withKeyPath:options:

etablieren programmatisch Ihre Bindung. Ich glaube, Sie haben eine IB-Palette erstellen die Bindungen im Interface Builder angezeigt zu bekommen, aber für eine einmalige Klasse Ich beabsichtige nicht, wieder zu verwenden, ich habe nie die Mühe gemacht.

Wenn Sie es schaffen, die Bindungen zu tun manuell sparen Sie sich eine Menge Zeit. Erstellen von benutzerdefinierten IB Paletten ist eine Menge Arbeit, im Vergleich zu einem paar Zeilen des manuellen Bindung Code. Aber, wenn Ihre Bedürfnisse eine benutzerdefinierte IB-Palette benötigen, dann würde ich beginnen mit der Überprüfung, was die NSView Unterklasse erfordert, Codierung weist. Ein großartiger Ort zu beginnen, ist Crawford Webseite auf Bindungen:

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html

Ich habe es sehr viel in den letzten paar Jahren hat es viel mit meinen benutzerdefinierten IB-Palette Objekten und mit verbindlichen Themen allgemein geholfen. Es ist ein Beispiel auf seiner Website speziell Detaillierung individuellen NSView des mit benutzerdefinierten Bindungen.

Etwas anderes zu beachten, ist, dass Ihre benutzerdefinierte Ansicht wird auch in der Interface Builder-Umgebung zu arbeiten. Es gibt ein paar kleine Korrekturen, die in Ihrem benutzerdefinierten NSView Objekt in Ihren Bindungen Code in Kraft gesetzt werden müssen, so dass es funktioniert und bindet richtig in Interface Builder. Diese Angaben sind auch auf Crawfords Website festgestellt:

http://homepage.mac.com/mmalc/CocoaExamples/controllers .html # ibBindings

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top