Frage

In IB ist es einfach, ein Etikett oder ein Textfeld, um einige Controller keyPath zu binden.

Die NSDockTile (erhältlich über [[NSApp dockTile] setBadgeLabel: @ „123“]) erscheint nicht in IB, und ich kann nicht herausfinden, wie programmatisch Eigenschaft seiner „badgeLabel“ binden, wie Sie ein Label / Textfeld binden könnten / Tabellenspalte.

Irgendwelche Ideen?

War es hilfreich?

Lösung

NSDockTile hat keine Bindungen, so dass Ihr Controller wird das Dock Fliese manuell aktualisieren müssen. Man könnte dies mit KVO tun, die die gleiche Wirkung wie verbindlich sie haben würden.

Erstellen Sie einen Kontext als global:


static void* MyContext=(void*)@"MyContext";

Dann in Ihrer init-Methode:


[objectYouWantToWatch addObserver:self forKeyPath:@"dockTileNumber" options:0 context:MyContext];

Sie müssen dann diese Methode implementieren, um den Schlüsselpfad über Änderungen werden:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if (context == MyContext) {
        [[NSApp dockTile] setBadgeLabel:[object valueForKeyPath:keyPath]];
    }
    else {
        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
    }
}

Achten Sie darauf, den Betrachter entfernen, wenn das Controller-Objekt geht weg.

Andere Tipps

Wenn NSDockTile Unterstützung Bindungen der Fall ist, können Sie die Methode bind:toObject:withKeyPath:options: verwenden Bindungen auf dem badgeLabel Eigenschaft einzurichten. Überprüfen Sie die Dokumentation für Details, auf denen Argumente zu verwenden. Wenn es nicht funktioniert, können Sie entweder Schlüsselwert implementieren in Ihrer Controller-Klasse zu beobachten und das Etikett jedes Mal der Wertänderungen aktualisieren oder sogar NSDockTile außer Kraft setzen eine Bindung kompatibel Unterklasse zu erstellen.

Ich habe viele Variationen von bind:toObject:withKeyPath:options: auf NSDockTile versucht, auf einem Controller, auf der Datenquelle. Ich kann nicht eine Kombination herauszufinden, die funktioniert. Alternativ gibt es eine Möglichkeit, eine BatchController Aufgabe hat, die an die Datenquelle gebunden werden können, und es aktualisiert dann das Abzeichen? Wie nehme ich eine NSObject und machen es Bindable?

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