【问题标题】:Modal view does not fire from child controller模态视图不会从子控制器触发
【发布时间】:2015-07-20 20:10:47
【问题描述】:

我的MainViewController 以模态方式加载另一个视图。

@implementation MainViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *uiViewController = [storyboard instantiateViewControllerWithIdentifier:@"splashViewController"];
    [uiViewController setModalPresentationStyle:UIModalPresentationCustom];
    [uiViewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self presentViewController:uiViewController animated:YES completion:nil];
}

当我直接从AppDelegate 加载MainViewController 时,会加载模态视图。

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

    UIViewController *rootController = [[RootViewController alloc] init];
    navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
    [navigationController setNavigationBarHidden:true];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window setRootViewController:navigationController];
    [self.window makeKeyAndVisible];
    return YES;
}

如果我将MainViewController 作为另一个控制器的子控制器加载,则无法加载模式视图。

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

    self.drawerViewController.leftViewController = self.leftDrawerViewController;
    self.drawerViewController.centerViewController = self.mainViewController;
    self.drawerViewController.animator = self.drawerAnimator;

    UIViewController *rootController = self.drawerViewController;
    navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
    [navigationController setNavigationBarHidden:true];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window setRootViewController:navigationController];
    [self.window makeKeyAndVisible];
    return YES;
}

主视图仍在加载。只是没有创建模态视图。

是什么导致了问题,我该如何解决?

【问题讨论】:

    标签: ios objective-c viewcontroller


    【解决方案1】:

    您不应该通过 viewDidLoad 方法呈现另一个视图控制器,

    到那时,当前视图还没有完成其视图层次结构的更改,

    您可以在调用 viewDidAppear 后呈现新的视图控制器, 这样您就可以将该代码移至 viewDidAppear

    【讨论】:

    • 现在看起来好像可以工作,但另一部分似乎失败了。
    • 只要确保你没有同时呈现多个视图控制器,或者你没有同时呈现和关闭它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多