代码之家  ›  专栏  ›  技术社区  ›  ahmed

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

  •  9
  • ahmed  · 技术社区  · 15 年前


    代码运行良好,但我不能做的是从nib文件加载视图

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

    多谢了

    4 回复  |  直到 15 年前
        1
  •  14
  •   Dan Ray    15 年前

    我认为您缺少的是可以在加载nib之后设置新UIView的帧。载入/初始化时间不是你唯一的机会。在下面的代码中,我还将load函数分解为若干部分,这样您就可以更容易地看到发生了什么。

    观察:

    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
  •  21
  •   Matt W.    10 年前

    我知道这是一篇老文章,但我想创建一个UIView作为一个单独的文件,并添加一个xib,这样我就可以在我的应用程序中的几个地方使用它(几乎就像将它用作自定义表视图单元格一样)。我不能完全正确,但这篇文章帮助我得到了我想要的结果。

    所以如果有人想用同样的方法,我就是这么做的:

    将其添加到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;
    }
    

    希望它能帮助别人,因为它花了我一点时间!

        3
  •  4
  •   Cheddar    15 年前

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

    这假设.xib中只有一个视图对象,但如果.xib更复杂,则可以对其进行修改。

        4
  •  -1
  •   Julian D.    8 年前

    你可以用我的简单课 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