【问题标题】:How to embed nibs programmatically?如何以编程方式嵌入笔尖?
【发布时间】:2012-08-03 21:48:22
【问题描述】:

我有一个 UIViewController,里面有一个 UIScrollView。

然后我创建了一个新的 UIView 子类,其中包含一些我想以编程方式添加到此 UIScrollView 中的属性,直到我的数据结束。

应该看起来像这张图片的东西:

我已经阅读了通过创建视图并将其类设置为自定义视图子类来实现此目的的其他主题,但我想以编程方式完成它并且它不起作用。

我该怎么做?

【问题讨论】:

  • 为什么要重新发明轮子?使用带有自定义 UITableViewCells 的 UITableView
  • 有可能,但我可以像在视图中那样绘制单元格并使其工作得比在 UIScrollView 中更快吗?因为我可以看到使用 tableview 或 scrollview 之间的唯一区别是我不必制作 cellForRowAtIndexPath。

标签: objective-c ios5 uiview embedded customization


【解决方案1】:

从您的图像看来,您希望从 nib 加载视图并将它们添加为 UIScrollView 的子视图。为此,请查看UINib documentation

你想创建你的笔尖并将它的主视图设置为你的 UIView 子类的一个实例,然后在你的 viewController 的viewDidLoad 中加载笔尖,并将笔尖的视图添加为你的滚动视图的子视图(我假设是您的 viewController 视图的子视图)。

您可以使用instantiateWithOwner:options: 实例化一个笔尖。

这个方法解压每个对象,初始化它,设置它的 属性为其配置的值,并重新建立任何 与其他对象的连接

要从 nib 获取视图数组,您可以执行以下操作:

UINib *myNib = [UINib nibWithNibName:@"myNib" bundle:[NSBundle mainBundle]];
NSArray *viewsFromNib = [myNib instantiateWithOwner:nil options:nil];

我假设我们在 UIViewController 中,并且我们在 viewDidLoad 中(或之后)的某个位置。然后,您将使用上面的数组并将视图添加为滚动视图的子视图。您可能需要设置这些视图的框架以正确放置它们,但这应该是微不足道的。

UIView *aView = [viewsFromNib objectAtIndex:0];
[self.scrollView addSubview:aView];

我希望这能让你朝着正确的方向前进。

编辑:

如果您想了解更多信息,您可能需要更深入地了解 nib 如何管理您的期望。与 UINib 文档链接的是“资源编程指南”,特别是 nib section

【讨论】:

  • 很好,它有效。唯一的问题是我无法将属性设置为我的嵌入视图。我试过MySubClass *aView = [viewsFromNib objectAtIndex:0]; aView.myProp = 100 但不起作用。我认为它实际上改变了属性值,但它不是“刷新”视图。
  • 在视图上设置属性不会更改视图,除非您在视图中定义行为以在属性更改时更新自身,或者使用[view setNeedsLayout]' or setNeedsDisplay 告诉它重绘/重新布局自身。查看我的编辑以了解更多关于 nib 的信息,这样您就可以管理您对事物应该如何表现的期望。
  • 很好,我的标签属性中缺少自定义设置器。谢谢!
【解决方案2】:

安德烈,这可以相对容易地完成。确保导入要嵌入的类。然后用你的正常创建它们

ClassName *subview=[[ClassName alloc]init]; 
[subview.view setFrame:CGRectMake(x,y,width,height)]; 
[self.view addSubview:subview.view]; 

这会将它添加到您指定的 x,y 坐标中,其大小由您的宽度、高度指定。您可以在 viewDidLoad 中或在需要创建它们时执行此操作。

【讨论】:

  • 我已经试过了。这段代码给了我这个错误:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Requesting the window of a view
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多