我有一个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将视图添加到屏幕上。如果是,我该如何访问它?
感谢您的帮助。
答案 0 :(得分:0)
instantiateWithOwner
方法重新分配视图控制器的属性(从创建控制器的nib设置)到新笔尖的属性。这些属性可能包含view
属性,因此其中的方法包含对setView:
的调用,并将视图控制器的视图设置为新的nib视图。之后,您正在尝试将视图作为子视图添加到自身,这自然会导致问题。
您想要创建自己的属性,例如secondaryView
,将nib的视图设置为该属性,并将其添加为子视图。您不想重新分配视图控制器的视图。