我正在制作一个在许多不同上下文中包含同一组按钮的应用程序。按钮将它们的动作发送到每个上下文中的不同对象。我希望能够在 IB 中设计一个包含按钮的单个 NSView,然后能够将该视图的副本放在我的笔尖的许多地方,同时保持链接,这样更改就会传播。我想将这些实例中的每一个连接到不同的对象,并让按钮将它们的动作发送到它们的父视图连接到的任何对象。
我想创建一个 NSView 的子类,它在加载时会用另一个从 nib 文件加载的视图替换自己,将连接的对象设置为文件的所有者,但我不相信这是最干净的方法。这是我对这个想法的实现(确实有效):
@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
这是最干净的方法吗?有没有标准的方法来解决这个问题?