可重用的接口位,在 IB 中设计

Posted

技术标签:

【中文标题】可重用的接口位,在 IB 中设计【英文标题】:Reusable bits of interface, designed in IB 【发布时间】:2010-02-23 02:40:37 【问题描述】:

我正在制作一个在许多不同上下文中包含同一组按钮的应用。按钮将它们的动作发送到每个上下文中的不同对象。我希望能够在 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

这是最干净的方法吗?有没有标准的方法来解决这个问题?

【问题讨论】:

【参考方案1】:

您可以在 IB 中创建带有按钮的视图,然后将该视图拖到库窗口中并保存。问题是,它们之间没有“联系”;编辑一个不会改变其他任何一个。

如果你愿意,你需要创建一个 NSView 的子类。

我想创建一个 NSView 的子类,它在加载时会用另一个从 nib 文件加载的视图替换自己,将连接的对象设置为文件的所有者,但我不相信这是最干净的方法。

这可能行得通。我不认为那真的那么脏。 init 方法返回对象的原因是它们可以显式返回不同的对象。但是,我不确定您将如何处理不同框架的视图,因为加载的视图将具有它在笔尖中的任何框架。

另一种方法是从笔尖加载按钮,但您必须在将它们添加为子视图之前调整它们的框架。

【讨论】:

讨厌它不保留链接(但考虑一下它会如何)。但只是一个很棒的提示!谢谢彼得!

以上是关于可重用的接口位,在 IB 中设计的主要内容,如果未能解决你的问题,请参考以下文章

使用 IB 中的设计重用 UIControl 子类

在IB中或以编程方式重用不同场景的视图

用于可重用视图的 iOS Swift UICollectionView registerNib 不起作用

无法从出列可重用 UITableViewCell 加载自定义单元格

如何使用 MFC 为 ActiveX 控件添加任何可重用接口?

自动布局不适用于可重用的表格视图单元格