【问题标题】:Subviews for custom UIView with Nib (.xib) don't load?不加载带有 Nib (.xib) 的自定义 UIView 的子视图?
【发布时间】:2013-10-08 21:23:42
【问题描述】:

我正在尝试使用关联的 Nib (.xib) 文件创建自定义 UIView 类,以帮助进行布局和创建。

现在,我的自定义视图中没有子视图出现,即使它们存在于我的 nib 文件中并且通过 IBOutlets 正确连接到我的自定义视图类。

我尝试过以下其他答案: Load custom UIView with XIB from a View Controller's view using IB

还有这个: How do I get a view in Interface Builder to load a custom view in another nib?

还有这个: http://soulwithmobiletechnology.blogspot.com/2011/06/create-uiview-with-nib-file-in-xcode-4.html

[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]方法似乎调用-[initWithCoder:],导致无限循环。

请告诉我要包括哪些其他详细信息来帮助解决此错误!

更新 1:我是否需要通过 -[layoutSubviews] 布置我的子视图?我的笔尖文件实际上没有布局吗?如果是这样,那么 nib 文件的意义何在?

【问题讨论】:

  • 您是要在 initWithCoder 还是 awakeFromNib 中加载 nib?

标签: ios objective-c uiview xib nib


【解决方案1】:

打开您的任何视图控制器并将此代码粘贴到您的 viewDidAppear 方法中:

NSArray * allTheViewsInMyNIB = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; // loading nib (might contain more than one view)
MyCustomView* problemView = allTheViewsInMyNIB[0]; // getting desired view
problemView.frame = CGRectMake(0,0,100,100); //setting the frame
[self.view addSubview:problemView]; // showing it to user

这就是你所要做的,呈现一个视图。如果你想与这个视图交互——你必须在你的类的接口中声明MyCustomView* problemView,而不是在方法中。

【讨论】:

  • 但是,这不会破坏封装吗?唯一关心笔尖名称的实体不应该是 UIView 本身吗?根据:blog.bignerdranch.com/…
  • 另外,为什么这需要在-[viewDidAppear:] 中?只要不做任何布局,为什么不能在-[viewDidLoad] 中实例化?
  • 你可以随心所欲,我以viewDidLoad 为例——帮助KenHaggerty 了解它是如何工作的。现在代码可以运行了,他可以根据自己的需要进行修改。
  • 我尝试在-[viewDidLoad] 中使用它,但我再次得到一个空视图。
  • 当您尝试在viewDidLoad 中使用它时,您将一无所获,因为 ViewController 的主视图尚未加载——它是 nil。尝试将子视图添加到零对象不是 Obj-C 中的错误,它什么也不做。您也可以在 -(void) viewDidLayoutSubviews 中执行此操作 - 当主视图已启动但未显示在屏幕上时会调用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 2015-02-03
  • 2020-05-16
  • 2017-10-01
相关资源
最近更新 更多