如何在xcode中创建一个nib文件的视图?

问题描述:

我有以下代码来创建一个视图,并把它在滚动视图允许分页
的代码工作正常但是我无法做的是加载从笔尖文件如何在xcode中创建一个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]; 
    } 

非常感谢

+0

如果你是做这种方式(和,不这样做,但如果你),你要记住了'添加到'scrollView'后的[newView release]。你的scrollView会在添加视图时保留视图,所以它不再属于你。 – 2010-06-22 12:39:08

我认为你缺少的是你可以在加载笔尖后设置新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财产做大滚动视图本身。

+0

那就是我所说的:) 谢谢丹,你的解决方案完美的工作,是的,我已经改变了像scrollView.frame.size这样的scrollview视图的位置。宽度*页面“的x协调员 再次感谢您,让我的一天:) – ahmed 2010-06-22 13:45:10

尝试像这样(改编自 “iPhone的开发者食谱”,第174):

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

这在你的.xib假设一个单一的视图对象,但如果你的.xib更复杂,你可以修改它。

+0

伟大的约翰,但我需要指定newView的位置,因为我将它添加到滚动视图 – ahmed 2010-06-22 12:15:04

+0

评论了一些@John N错过了,但我错过了他没有错过它。所以没关系! – 2010-06-22 12:31:50

我知道这是一个旧帖子,但我想创建一个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; 
} 

然后在界面生成器/ xib编辑器,您必须指定您为UIView创建的类,以便您可以添加IBOutlets。

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

+0

谢谢@Matt W. – Meet 2012-07-31 08:40:59

+2

没有必要做一个新的CGRect,你可以简单地做'self.frame = frame' – 2012-12-07 19:04:06

+0

太棒了!很棒的解决方案! – bbrame 2013-06-14 18:14:31

您可以使用我的简单类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