【问题标题】:appDelegate set rootViewController and viewWillAppear is not called?appDelegate 设置 rootViewController 和 viewWillAppear 不被调用?
【发布时间】:2018-07-17 07:53:08
【问题描述】:

这是演示,我在didFinishLaunchingWithOptions 中设置了RootViewController,但是viewControllerviewWillAppear 没有被调用!我猜是因为NavigationController添加了ViewController消息的响应链失败?

我知道应该设置为

self.window.rootViewController = navigationController

但我想知道我设置了什么

self.window.rootViewController = mainViewController

为什么不打电话给mainViewControllerviewWillAppear?谢谢。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    ViewController *mainViewController = [[ViewController alloc] init];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
    self.window.rootViewController = mainViewController;
    [self.window makeKeyAndVisible];

    return YES;
}

viewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@"viewWillAppear");
}

@end

【问题讨论】:

  • self.window.rootViewController = navigationController
  • @mag_zbc 与调用 viewwillappear 失败无关
  • 我知道它应该设置为 self.window.rootViewController = navigationController;但我想知道我设置为 self.window.rootViewController = mainViewController;为什么不调用 mainViewController 的 viewWillAppear?谢谢。

标签: ios objective-c


【解决方案1】:

嗯...有趣。

保留以下内容:

[[UINavigationController alloc] initWithRootViewController:mainViewController];

虽然没用过,但好像在偷ViewController'sviewDidAppear

如果您评论该行,那么它会按您的意愿工作。

即:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {        
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];

    ViewController *mainViewController = [[ViewController alloc] init];

    //Comment the navigationController instantiation
    //UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];

    self.window.rootViewController = mainViewController;
    [self.window makeKeyAndVisible];

    return YES;
}

也许navigationController 被设置为拥有ViewController,但由于它没有显示在屏幕上,所以viewDidLoadviewDidAppear 都不会在以后出现,但是...当您将ViewController 重新分配给窗口,内部视图加载逻辑感觉不再需要调用viewDidAppear
可能是错误或故意,我不知道。


注意:我真的没有理由这样做。我只是在解释造成它的原因。

【讨论】:

    猜你喜欢
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多