ViewController的视图为零;仅使用子视图;这个可以吗?

时间:2012-01-26 07:34:27

标签: objective-c uiview uiviewcontroller

在AppDelegate中执行此操作:

viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];

定义viewController的视图(使用setViewviewController.view=)并仅添加视图的subviews是否有任何问题?如果将大多数应用程序显示的内容放在子视图而不是主根view属性本身,会有什么不同?

如果viewController.view仍然是nil(或者如果没有loadView或nib的实现,那么它处于什么状态)但是你主动操纵{{1 }

3 个答案:

答案 0 :(得分:0)

如果没有nib且没有loadView的实现,则.view设置为普通的UIView。所以可以添加子视图。如果view属性为nil,则调用loadView重新加载它。

来自loadView documentation

  

此方法的默认实现查找有效的nib信息,并使用该信息加载关联的nib文件。如果未指定nib信息,则默认实现会创建一个普通的UIView对象并使其成为主视图。

答案 1 :(得分:0)

如果viewController.view为零,则 是一个问题,因为它没有显示视图或您要添加子视图。但是,如果在初始化viewController时未指定nibName并且没有与UIViewController的子类同名的nib,viewController.view将最终作为占据整个屏幕的空白视图,即不是零。

说你在子视图中显示内容而不是主视图有点尴尬,因为实际上你的子视图只是主视图的(子)部分。您几乎不会直接在顶级视图中绘制/显示内容; 99.9%的时间你会使用像UILabels,UITextViews,UIImageViews等子视图来做到这一点,这会被添加为顶级视图的子视图。

答案 2 :(得分:0)

我必须自己做这件事。您可以定义没有笔尖的UIViewController。所以你会做[MyUIViewController new];之类的事情。但是你必须给它的视图至少一个背景颜色,否则它将不会显示。所以:

myView = [MyUIViewController new];
myView.backgroundColor = [UIColor whiteColor];
[self presentModalViewController:myView animated:YES];