1

我试图了解视图控制器在从一个切换到另一个时的行为(显示不同的视图)

addSubiew 语句的一部分似乎有效,我无法解释这两个语句会发生什么:

self.view = someViewController.view; [someViewController 加载视图];

事实上,我遇到了一个情况,其中只有第一个似乎工作(显示在 someViewController 中定义的视图),而在另一种情况下只有第二个。

更准确地说,从根 viewController.view 到 anotherViewController.view (已经实例化)我必须使用第一个,回来我需要使用第二个。我不明白在当前情况下允许一个或另一个语句起作用的区别是什么。

谢谢

4

2 回答 2

3

甚至很难理解你的问题。但我会试着回答:

iPhone OS 使用一堆视图并将第一个视图显示给用户。您可以将视图弹出(删除)或推送(添加)到此堆栈。

您提供的代码有些“晦涩”。获得控制权的最佳做法是将子视图添加到您的窗口或任何其他视图

IE[window addSubview:viewController.view];

不要使用self.view = someViewController.view;覆盖当前视图 而是初始化您的新 ViewController 并将其视图添加到当前视图的子视图中。

任何问题?只是评论。

于 2010-01-09T16:05:39.860 回答
2

看起来您对视图控制器的工作方式有一些误解。

这两个陈述有几个问题:

self.view = someViewController.view;

根据 UIViewController.view 的文档:

“每个视图控制器对象都是其视图的唯一所有者。您不能将同一个视图对象与多个视图控制器对象相关联。” -苹果文档

一旦执行了那行代码,视图就会有 2 个不同的控制器,这很糟糕。

下一行:

[someViewController loadView];

这很糟糕,因为您永远不应该显式调用 loadView。

从 UIViewController.loadView 的文档:

“你永远不应该直接调用这个方法。”

从 UIViewController.view 的文档:

“如果你访问这个属性并且它的值当前是 nil,视图控制器会自动调用 loadView 方法并返回结果视图。”

花一些时间阅读 viewController 教程和指南,例如“iPhone OS 的视图控制器编程指南”。他们是很好的文档,可以教很多东西。

于 2010-01-09T16:29:07.473 回答