【问题标题】:Nib is automatically being added to the screen笔尖自动添加到屏幕上
【发布时间】:2011-05-19 00:00:09
【问题描述】:

我有一个要在代码中实例化的 nib 文件。我的 UIViewController 的主视图也是从 nib 文件加载的。

这是我的 UIViewController 的 viewDidLoad 方法:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UINib *nib = [UINib nibWithNibName:@"MyCustomView" bundle:nil];
    NSArray *nibViews = [nib instantiateWithOwner:self options:nil];
    MyCustomView *myView = [nibViews objectAtIndex:0];
    myView.frame = CGRectMake(100.0f, 100.0f, 91.0f, 91.0f);
    [self.view addSubview:myView];
}

这会产生某种无限循环。如果我注释掉 [self.view addSubview:myView],myView 会出现,但当前屏幕上的所有内容都会消失。我不认为 instantiateWithOwner 将视图添加到屏幕上。如果是,我如何访问它?

感谢您的帮助。

【问题讨论】:

  • 您是否在 Interface Builder 和代码中声明了 XIB 名称?如果你这样做,我认为你会收到一个警告,但它会编译。
  • 我的 .h/.m 文件(nib 背后的代码)和 nib 具有相同的名称。它基本上类似于:MyCustomView.h、MyCustomView.m、MyCustomView.xib。不过这不是问题,而且这似乎是人们这样做的一般方式。
  • 我不是这个意思。在您的 MainWindow.xib 中,如果您已将自定义视图设置为视图控制器(这是一种方法)。然后,您应该添加一个带有 nib 的子视图。这样做会导致子视图的无限循环。

标签: iphone ios uiview xib


【解决方案1】:

instantiateWithOwner 方法将视图控制器的属性(从创建控制器的 nib 设置)重新分配给新 nib 的属性。这些属性可能包括view 属性,因此该方法在其中包含对setView: 的调用,并将视图控制器的视图设置为新笔尖的视图。之后,您尝试将视图作为子视图添加到自身,这自然会导致问题。

您想创建自己的属性,例如secondaryView,将 nib 的视图设置为该属性,并将其添加为子视图。您不想重新分配视图控制器的视图。

【讨论】:

  • 我不明白您所说的“将笔尖的视图设置为那个”是什么意思。我无法将 Interface Builder 中的 nib 视图设置为 UIViewController 中的属性,除非该视图控制器是我的 nib 的文件所有者。有没有办法在不覆盖我的视图控制器当前视图的情况下实例化笔尖?
  • 两个参数都传入 nil 到 instantiateWithOwner:options:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
相关资源
最近更新 更多