我试图了解视图控制器从一个切换到另一个时的行为(显示不同的视图)
一个部分形成了似乎有效的addSubiew语句,我找不到对这两个语句会发生什么的解释:
self.view = someViewController.view; [someViewController loadView];
实际上我得到的情况是,只有第一个似乎工作(显示someViewController中定义的视图),而在另一种情况下只显示第二个。
更确切地说,从根viewController.view到anotherViewController.view(已经被证实)我必须使用第一个,回来我需要使用第二个。 我无法理解允许一个或另一个陈述工作的当前情况有什么不同。
谢谢
答案 0 :(得分:3)
甚至很难理解你的问题。但我会尝试回答它:
iPhone OS使用一堆视图并向用户显示第一个视图。 您可以弹出(删除)或推送(添加)视图到此堆栈。
您提供的代码有点“模糊”。获得控制权的最佳方法是将SubView添加到您的窗口或任何其他视图
即。 [window addSubview:viewController.view];
请勿使用self.view = someViewController.view
覆盖当前视图;
而是初始化新的ViewController并将其视图添加到当前视图的子视图中。
有任何问题吗?只是评论。
答案 1 :(得分:2)
您似乎对视图控制器的工作方式存在一些误解。
这两个陈述有几个问题:
self.view = someViewController.view;
根据UIViewController.view的文档:
“每个视图控制器对象是其视图的唯一所有者。您不能将同一视图对象与多个视图控制器对象关联。” -Apple Docs
一旦代码行执行,视图将有2个不同的控制器,这是不好的。
下一行:
[someViewController loadView];
这很糟糕,因为你永远不应该显式调用loadView。
来自UIViewController.loadView的文档:
“你不应该直接调用这种方法。”
来自UIViewController.view的文档:
“如果您访问此属性并且其值当前为nil,则视图控制器会自动调用loadView方法并返回结果视图。”
花些时间阅读viewController教程和指南,例如“适用于iPhone OS的View Controller编程指南”。他们是优秀的博士,可以教很多。