通过Interface Builder在另一个视图中添加带有nib文件的现有视图

时间:2010-11-08 16:49:03

标签: iphone interface-builder

我有一个nib文件说TestView.xib。我添加了一些组件。

现在我创建了另一个nib文件AnotherTestView.xib

我想使用接口buidler将TestView.xib的视图添加到AnotherTestView.xib中,这样我就不需要再次从TestView添加相同的组件。它们就像我所有观点的基本组成部分一样。

有没有办法做到这一点。就像我们可以在IB中为UIView设置nib文件名。或者我们如何将具有nib文件的现有视图添加到另一个nib文件中。

1 个答案:

答案 0 :(得分:0)

我在一篇冗长的博客文章中写了我们embed custom-view Nibs inside other Nibs的内容。紧要关键是在自定义视图中覆盖-awakeAfterUsingCoder:,将从AnotherTextView.xib加载的对象替换为从“嵌入式”Nib(TestView.xib)加载的对象。

这些方面的东西:

// TestView.m
- (id) awakeAfterUsingCoder:(NSCoder*)aDecoder {
    BOOL theThingThatGotLoadedWasJustAPlaceholder = ([[self subviews] count] == 0);
    if (theThingThatGotLoadedWasJustAPlaceholder) {
        // load the embedded view from its Nib
        TestView* theRealThing = nil;
        NSArray* elements = [[NSBundle mainBundle] loadNibNamed: NSStringFromClass([TestView class])
                                                          owner: nil
                                                        options: nil];
        for (id anObject in elements) {
            if ([anObject isKindOfClass:[TestView class]]) {
                theRealThing = anObject;
                break;
            }
        }

        // pass properties through
        theRealThing.frame = self.frame;
        theRealThing.autoresizingMask = self.autoresizingMask;

        [self release];
        self = [theRealThing retain];
    }
    return self;
}