UIViewController和XIB问题

时间:2011-08-10 00:05:10

标签: iphone xcode ipad uiviewcontroller

如何阻止UIVIewController加载xib?

我在线下载了一个XCode(iPhone)项目,我想停止加载xib文件。视图确实加载方法没有任何处理xib的代码。如何强制从它的viewDidLoad方法而不是xib加载UIViewController?

5 个答案:

答案 0 :(得分:3)

覆盖loadview但不要调用[super loadview]。例如:

-(void)loadView{
    self.view = [UIView new];
    [self.view setBackgroundColor:[UIColor redColor]];
}

来自文档

的loadView

创建控制器管理的视图。

  

你永远不应该叫这个方法   直。视图控制器在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加载其视图。