【问题标题】:How to create view from a nib file in xcode?如何从 xcode 中的 nib 文件创建视图?
【发布时间】:2023-03-22 00:58:01
【问题描述】:

我有以下代码来创建一个视图并将其放在滚动视图中以允许分页
代码工作正常,但我不能做的是从 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];
    }

非常感谢

【问题讨论】:

  • 如果您要这样做(并且,不要,但如果您曾这样做),您需要在将 [newView release] 添加到 scrollView 后记住它。您的 scrollView 将在添加时保留该视图,因此它不再属于您。

标签: iphone objective-c xcode uiview


【解决方案1】:

我知道这是一篇旧文章,但我想创建一个 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。

希望它对某人有所帮助,因为我花了一点时间!

【讨论】:

  • 不用新建CGRect,直接做self.frame = frame
  • 太棒了!很好的解决方案!
【解决方案2】:

我认为您缺少的是您可以在加载笔尖后设置新 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 属性大。

【讨论】:

  • 这就是我要说的 :) 谢谢丹,你的解决方案完美无缺,是的,我已经改变了滚动视图上视图的位置,例如“scrollView.frame.size.width * page " 再次感谢 x 协调员,你让我很开心 :)
【解决方案3】:

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

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

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

【讨论】:

  • Great John,但我需要指定 newView 的位置,因为我要将它添加到滚动视图中
  • 评论了@John N 错过的一些事情,但我错过了他没有错过的事情。所以没关系!
猜你喜欢
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多