Question

Dans IB, il est facile de lier une étiquette ou un champ de texte au chemin de clé de certains contrôleurs.

NSDockTile (disponible via [[NSApp dockTile] setBadgeLabel: @ "123"]) n'apparaît pas dans IB, et je ne vois pas comment lier par programme son "badgeLabel". comme si vous pouviez lier une colonne label / textfield / table.

Des idées?

Était-ce utile?

La solution

NSDockTile n’ayant aucune liaison, votre contrôleur devra mettre à jour manuellement la vignette de dock. Vous pouvez le faire en utilisant KVO, ce qui aurait le même effet que de le lier.

Créer un contexte en tant que global:


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

Ensuite, dans votre méthode init:


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

Vous devez ensuite implémenter cette méthode pour être averti des modifications apportées au chemin d'accès à la clé:

- (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];
    }
}

Assurez-vous de supprimer l'observateur lorsque l'objet du contrôleur s'en va.

Autres conseils

Si NSDockTile prend en charge les liaisons, vous pouvez utiliser la méthode bind: toObject: withKeyPath: options: pour configurer les liaisons sur la propriété badgeLabel. Consultez la documentation pour plus de détails sur les arguments à utiliser. Si cela ne fonctionne pas, vous pouvez implémenter l’observation de la valeur de la clé dans votre classe de contrôleur et mettre à jour l’étiquette chaque fois que la valeur change, ou même substituer NSDockTile pour créer une sous-classe compatible avec les liaisons.

J'ai essayé de nombreuses variantes de bind: toObject: withKeyPath: options: sur NSDockTile, sur un contrôleur, sur la source de données. Je n'arrive pas à trouver une combinaison qui fonctionne. Sinon, existe-t-il un moyen d'avoir un objet BatchController pouvant être lié à la source de données, puis il met à jour le badge? Comment prendre un objet NSObject et le rendre lié?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top