Je fais une application qui comprend le même groupe de boutons dans de nombreux contextes différents. Les boutons envoient leurs actions à un objet différent dans chaque contexte. J'aimerais pouvoir concevoir un seul NSView dans IB contenant les boutons, et ensuite pouvoir mettre des copies de cette vue à plusieurs endroits dans mes nibs, tout en maintenant le lien, afin que les changements se propagent. Je voudrais connecter chacune de ces instances à différents objets, et les boutons envoient leurs actions à tout objet auquel leur vue parent est connectée. J'ai pensé à créer une sous-classe de NSView qui, lorsqu'elle est chargée, se substitue à une autre vue qu'elle charge à partir d'un fichier nib, définissant l'objet connecté comme propriétaire du fichier, mais je ne suis pas convaincu que cette méthode soit la plus propre. Voici ma mise en œuvre de cette idée (qui -does- travail):bits d'interface réutilisables, conçu dans IB
@implementation AVNViewFromNib
- (void)awakeFromNib
{
//Load the nib whose name is specified by the "nibFile" key
NSNib* viewNib = [[NSNib alloc] initWithNibNamed:[self valueForKey:@"nibFile"] bundle:[NSBundle mainBundle]];
NSMutableArray* topLevelObjects = [NSMutableArray new];
[viewNib instantiateNibWithOwner:relatedObject topLevelObjects:&topLevelObjects];
//Find our replacement view in that nib
for (id currentObject in topLevelObjects)
{
if ([currentObject isKindOfClass:NSClassFromString(@"AVNReplacementView")])
{
representedView = currentObject;
break;
}
}
//Copy appropriate properties from us to our representedView
[representedView setAutoresizingMask:[self autoresizingMask]];
[representedView setFrame:[self frame]];
[[self superview] addSubview:representedView];
//We were never here. :)
[self removeFromSuperview];
[viewNib autorelease];
}
@end
@implementation AVNReplacementView
@end
Est-ce la méthode la plus propre? Existe-t-il un moyen standard d'y parvenir?
Nasty qu'il ne garde pas un lien (mais en y réfléchissant comment le ferait-il). Mais tout simplement un conseil génial! Merci Peter! – bladnman