Я создаю приложение, которое включает в себя одну и ту же группу кнопок в разных контекстах. Кнопки отправляют свои действия различным объектам в каждом контексте. Я хотел бы иметь возможность спроектировать один NSView в IB, содержащий кнопки, и затем иметь возможность размещать копии этого вида во многих местах моих перьев, сохраняя при этом связь, поэтому изменения распространяются. Я хотел бы подключить каждый из этих экземпляров к различным объектам, и чтобы кнопки отправляли свои действия любому объекту, к которому подключен их родительский вид.
Я думал о создании подкласса NSView, который при загрузке заменяет себя другим представлением, загружаемым из файла пера, устанавливая связанный объект в качестве владельца файла, но я не уверен, что это самый чистый метод. Вот моя реализация этой идеи (которая работает):
@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
Это самый чистый метод? Есть ли стандартный способ сделать это?