如何阻止UIVIewController加载xib?
我在线下载了一个XCode(iPhone)项目,我想停止加载xib文件。视图确实加载方法没有任何处理xib的代码。如何强制从它的viewDidLoad方法而不是xib加载UIViewController?
答案 0 :(得分:3)
覆盖loadview但不要调用[super loadview]。例如:
-(void)loadView{
self.view = [UIView new];
[self.view setBackgroundColor:[UIColor redColor]];
}
来自文档
创建控制器管理的视图。
你永远不应该叫这个方法 直。视图控制器在view属性时调用此方法 请求,但目前为零。如果您手动创建视图, 您必须覆盖此方法并使用它来创建视图。如果你 使用Interface Builder创建视图并初始化视图 controller,即使用the初始化视图 initWithNibName:bundle:方法,设置nibName和nibBundle 属性直接,或创建您的视图和视图控制器 Interface Builder - 然后你不能覆盖这个方法。
此方法的默认实现查找有效的nib 信息并使用该信息加载相关的nib文件。 如果未指定nib信息,则创建默认实现 一个简单的UIView对象,并使其成为主视图。
如果您覆盖此方法以手动创建视图, 您应该这样做并将层次结构的根视图分配给 查看属性。 (您创建的视图应该是唯一的实例和 不应与任何其他视图控制器对象共享。) 这种方法的自定义实现不应该调用super。
如果要对视图执行任何其他初始化,请执行此操作 所以在viewDidLoad方法中。在iOS 3.0及更高版本中,您还应该 覆盖viewDidUnload方法以释放对该的任何引用 查看或其内容。
答案 1 :(得分:0)
尝试将initWithNibNameOrNil
方法更改为init
。
如果这不起作用,也可以通过取消注释并在那里设置视图来覆盖loadView
方法。
以下是一个例子:
- (id)init
{
self = [super init];
if (self) {
// Custom initialization
}
return self;
}
- (void)loadView {
[super loadView];
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,460)];
myView.backgroundColor = [UIColor redColor];
self.view = myView;
[myView release];
}
答案 2 :(得分:0)
编写自己的init方法。稍后,如果需要nib,则可以创建UINib对象,当需要视图时,可以使用instantiateWithOwner。
在创建视图控制器时使用init
将阻止nib加载。另一件事是将nib命名为视图控制器名称以外的其他东西 - 因为如果它们匹配,可以自动加载nib。我使用ViewControllerName_iPad或ViewControllerName_iPhone并根据设备习惯用法创建所需的视图。
答案 3 :(得分:0)
从xib文件加载的代码不在视图控制器本身的viewDidLoad
方法中。
您通常应该在应用程序委托的didFinishLaunchingWithOptions:
方法或NSMainNibFile
条目下的info.plist文件中找到它。
答案 4 :(得分:0)
也许我在这里咆哮错误的树,但UIViewController是否从XIB加载其视图,因为加载UIViewController本身的XIB在视图控制器的设置中设置了“NIB Name”?
e.g。加载MainWindow.xib,查看您的视图控制器。选择它,然后在右侧查看视图控制器设置(第4个选项卡)。其中一个设置是“NIB名称”。只需将其留空以停止视图控制器从该XIB / NIB加载其视图。