1

我知道viewDidLoad在 的生命周期中可能会多次调用该方法UIViewController。但这怎么可能?如何让它多次调用而不是直接调用它?我试过这样做:

 UIView *view  = [[UIView alloc] initWithFrame:self.view.frame];

view.backgroundColor = [UIColor greenColor];

self.view = view;

而我的观点实际上改变了,viewDidLoad没有被调用。谁能举个例子?

4

2 回答 2

3

第一次访问 viewController 的view属性时,将使用该视图创建视图loadView,然后您将收到viewDidLoad调用。

除非视图被销毁,否则您将不会viewDidLoad再次收到呼叫 - 如果您的 viewController 离开屏幕并UIKit决定清除任何不可见的视图,则可能会发生这种情况。因此,下次您访问该view属性时,它会注意到它不存在并再次创建一个,loadView然后调用viewDidLoad.

于 2013-03-10T11:53:09.053 回答
0

viewWillAppear 方法是一个 UIViewController 方法。为什么不直接打电话?

顺便说一句,没有办法做到这一点,当您将 UIView 分配给您的 self.view 时,如果您没有在 init 或 loadView 或 didLoad 方法中执行此操作..

生命周期是:

  • 在里面
  • loadView //在这里改变你的视图
  • viewDidLoad

然后您呈现视图并:

  • 视图将出现:
  • viewDidAppear:

如果你想在你的 uiviewcontroller 生命周期中改变视图,你应该这样做:

UIView *view  = [[UIView alloc] initWithFrame:self.view.frame];

view.backgroundColor = [UIColor greenColor];
[self viewWillAppear:NO]; //set to yes if you are making some kind of animation
self.view = view;
[self viewDidAppear:NO];

will消失和确实消失将根据UIVIewController生命周期调用。

于 2013-03-10T12:02:10.990 回答