如何在xib或storyboard上使用xib加载自定义视图

时间:2013-08-03 14:32:12

标签: iphone ios

我只想在viewcontoller的xib或stroy board上加载自定义视图(使用xib)。执行相同操作的最佳做​​法是什么。

我在下面使用了awakeAfterUsingCoder功能代码。

(id) awakeAfterUsingCoder:(NSCoder*)aDecoder
{
    BOOL theThingThatGotLoadedWasJustAPlaceholder = ([[self subviews] count] == 0);
    if (theThingThatGotLoadedWasJustAPlaceholder)
    {
        CustomView* theRealThing = (id) [CustomView view];
        theRealThing.frame = self.frame;
        theRealThing.autoresizingMask = self.autoresizingMask;
        return theRealThing;
    }
    return self;
}

但使用此功能后,我的awakeFromNib开始多次调用。

请sugegst。

1 个答案:

答案 0 :(得分:0)

正如您所发现的那样,目前正确的答案是过于复杂和错误。有一个更标准和更好的方法来做到这一点:

  1. 创建一个空的XIB
  2. 将UIView添加到您的XIB,以便它是唯一的顶级对象(除了代理First Responder和文件的所有者)
  3. 将新UIView的类更改为CustomView
  4. 实例化XIB并检索您的CustomView实例,如下所示:

    CustomView * view = [[UINib nibWithNibName:@“CustomView”bundle:nil] instantiateWithOwner:self options:nil] [0];

  5. 在视图控制器的viewDidLoad方法中将其添加到视图层次结构中:

    [self.view addSubview:view];

  6. 如果需要进行任何自定义初始化,请务必覆盖CustomView子类中的-initWithCoder:。我知道这很多,所以如果这些步骤让您感到困惑或者您遇到困难,请告诉我。