【问题标题】:viewDidLoad and ViewDidAppear not being called未调用 viewDidLoad 和 ViewDidAppear
【发布时间】:2016-11-04 11:00:32
【问题描述】:

我有一个从 xib 文件创建的 UIViewController

我这样初始化它:

 _sharedSingleton = [[SlipChangesViewController alloc] init];
            [[NSBundle mainBundle] loadNibNamed:@"SlipChangesViewController" owner:_sharedSingleton options:nil];

我将 UIViewController 的视图添加到另一个 UIViewController 的子视图中:

[self.view addSubview:slipChangesVC.view];

现在奇怪的是,视图已成功添加到子视图中,但由于某种原因,viewDidLoadvieWillAppear 都没有被调用。然而,它成功地调用了创建共享单例的方法和init 方法。

我已仔细检查以确保:

  • UIViewsUIViewControllers 都不是 nil
  • xib 的出口已正确链接
  • 我正在打电话给[super viewDidLoad][super viewWillAppear]

我检查了 stackOverflow 上的各种线程并尝试了那里的建议,但没有成功。例如。拨打[slipChangesVC view]

有谁知道为什么不调用这两种方法?

【问题讨论】:

标签: ios objective-c uiview viewdidload viewdidappear


【解决方案1】:

您将在现有视图上添加一个 SlipChangesViewController 视图。在那种情况下 viewDidLoad 和 viewWillAppear 永远不会被调用。您需要为此添加一个 ViewController

试试这个

- (void)addChildViewC:(UIViewController *)childViewC
{
    [self addChildViewController:childViewC];
    childViewC.view.frame = self.view.bounds;
    [self.view addSubview:childViewC.view];
    [childViewC didMoveToParentViewController:self];
}

【讨论】:

    【解决方案2】:

    这不是添加子视图控制器的正确方法。通过这种方式,视图所有者获得了更改。视图与其视图控制器分离,视图控制器停止接收 viewDidLoad 和其他视图方法。

    如果你想让它工作,请查看已经回答的问题: add UIViewController in subview

    【讨论】:

      【解决方案3】:

      我永远不会让视图控制器成为单例。这不是单例。它被创建,销毁,再次创建,再次销毁。

      我认为 viewDidLoad 在视图控制器的生命周期内只被调用一次。所以让你的单身人士可能会导致各种各样的问题。

      【讨论】:

        猜你喜欢
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        • 2016-09-23
        • 1970-01-01
        • 2012-08-26
        相关资源
        最近更新 更多