如何在xcode中从nib文件创建视图?

时间:2010-06-21 23:06:39

标签: iphone objective-c xcode uiview

我有以下代码来创建视图并将其放在scrollview中以允许分页 代码工作正常,但我不能做的是从nib文件加载视图

换句话说,

我想使用“initWithNibName”而不是“initWithFrame”?

   - (void)createPageWithColor:(UIColor *)color forPage:(int)page
     {
     UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 300,400)];
         newView.backgroundColor = color;
     [scrollView addSubview:newView];
    }

非常感谢

4 个答案:

答案 0 :(得分:21)

我知道这是一篇旧帖子,但我想创建一个UIView作为一个单独的文件并添加一个xib,这样我就可以在我的app中的几个地方使用它(几乎就像将它用作自定义表视图单元格)。我无法理解,但这篇文章帮助我得到了我想要的结果。

所以,如果有人想以同样的方式做到这一点,那就是我所做的:

将其添加到UIView的.m文件中的初始化代码中:

- (id)initWithFrame:(CGRect)frame
{
    self = [NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil][0];
    if (self)
    {
        self.frame = frame;
    }
    return self;
}

然后在界面构建器/ xib编辑器中,您必须分配为UIView创建的类,以便添加IBOutlets。

希望它可以帮助别人,因为它花了我一点!

答案 1 :(得分:14)

我认为你缺少的是你可以在加载笔尖后设置新UIView的框架。加载/初始化时间不是你唯一的注意力。我也在下面的代码中将加载函数分解成碎片,这样你就可以更容易地看到正在发生的事情。

观察:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"yournib" 
                                                     owner:self 
                                                   options:nil];
//I'm assuming here that your nib's top level contains only the view 
//you want, so it's the only item in the array.
UIView *myView = [nibContents objectAtIndex:0];
myView.frame = CGRectMake(0,0,300,400); //or whatever coordinates you need
[scrollview addSubview:myView];

不要忘记,为了让UIScrollView实际滚动,您需要将其contentSize属性设置为其中的商品大小,这可能比滚动视图本身的.frame属性大。

答案 2 :(得分:4)

尝试这样的事情(改编自“The iPhone Developers Cookbook”,第174页):

UIView *newView = [[[NSBundle mainBundle] loadNibNamed:@"yournib" owner:self options:nil] lastObject];

这假定您的.xib中有一个视图对象,但如果您的.xib更复杂,则可以修改它。

答案 3 :(得分:-1)

您可以使用我的简单类https://github.com/ulian-onua/KRNNib通过一个方法调用从nib文件创建视图 例如,您可以采用下一种方式使用KRNNib:

UIView *view = [KRNNib viewFromNibWithName:@"TestView"];
[self.view addSubview:view]; // add instantiated view as subview to view of current UIViewController