Question

J'ai créé une sous-classe de NSView pour dessiner une image sous forme de motif:

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

@end

J'ai mis en œuvre les éléments suivants pour exposer les liaisons:

+ (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
}

Malheureusement, la liaison image n'apparaît pas dans Interface Builder.

Dois-je vraiment créer un IBPlugin pour exposer les liaisons dans Interface Builder? Cela semble exagéré pour une vue personnalisée que je ne souhaite pas réutiliser.

Était-ce utile?

La solution

Réponse au titre: Non, vous pouvez lier une vue personnalisée sans plug-in IB (en le faisant dans le code).
Réponse à la question dans le corps de la question: Oui, vous avez besoin d'un plug-in IB pour exposer la liaison dans IB.

Votre code ne s'exécute pas dans Interface Builder à moins que vous ne le mettiez dans Interface Builder, et que le message exposeBinding: constitue votre code. Par conséquent, vous devez l'insérer dans Interface Builder. Cela signifie qu’il faut écrire un plug-in IB.

De plus, les plug-ins IB ne sont pas identiques aux anciennes palettes IB. Les plug-ins nécessitent IB 3 et sont beaucoup plus faciles à créer. Les palettes nécessitent IB 2 et ont été pénibles à créer.

Autres conseils

J'ai simplement lié mon objet contrôleur à mon objet de vue à l'aide d'une liaison standard différente (par exemple, toolTip), puis modifié le fichier XIB à l'aide d'un éditeur de texte et modifié manuellement le code XML.

Ensuite, la liaison fonctionne correctement et s'affiche même dans Interface Builder pour démarrer!

Non, vous pouvez utiliser la méthode

bind: toObject: withKeyPath: options:

pour établir votre liaison par programme. Je pense que vous devez créer une palette IB pour que les liaisons apparaissent dans Interface Builder, mais pour une classe unique, je n'ai pas l'intention de la réutiliser, je ne me suis jamais dérangé.

Si vous parvenez à faire les liaisons manuellement, vous gagnerez beaucoup de temps. La création de palettes IB personnalisées représente beaucoup de travail par rapport à quelques lignes de code de reliure manuelle. Mais, si vos besoins nécessitent une palette IB personnalisée, je commencerai par examiner ce que la sous-classe NSView exigera, en termes de codage. Le site Web de Crawford sur les reliures constitue un excellent point de départ:

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

Je l'ai beaucoup utilisée ces deux dernières années. Cela m'a beaucoup aidé avec mes objets de palette IB personnalisés et avec les problèmes de reliure en général. Sur son site, vous trouverez un exemple détaillant en détail NSView personnalisé avec des liaisons personnalisées.

Autre chose à noter, votre vue personnalisée devra également fonctionner dans l'environnement Interface Builder. Quelques petites corrections doivent être mises en place dans votre code de liaison dans votre objet NSView personnalisé afin qu'il fonctionne et se lie correctement dans Interface Builder. Ces détails sont également notés sur le site de Crawford:

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

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