在 iPad 上未调用 viewDidAppear 和 viewWillAppear

Posted

技术标签:

【中文标题】在 iPad 上未调用 viewDidAppear 和 viewWillAppear【英文标题】:viewDidAppear and viewWillAppear not getting called on the iPad 【发布时间】:2012-05-22 18:16:12 【问题描述】:

我使用以下代码在 viewController 上调用设置页面作为表单:

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *device = [standardUserDefaults objectForKey:@"Device"];
if ([device isEqualToString:@"iPhone"]) 
    Settings_iPhone *screen = [[Settings_iPhone alloc] initWithNibName:nil bundle:nil];
    screen.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:screen animated:YES];
    [screen release];

if ([device isEqualToString:@"iPad"])     
    Settings_iPhone *screen = [[Settings_iPhone alloc] initWithNibName:@"Settings_iPad" bundle:nil];
    screen.modalPresentationStyle = UIModalPresentationFormSheet;
    screen.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:screen animated:YES];
    [screen release];

当设置页面被调用和关闭时,viewDidAppear 和 viewWillAppear 仅在 iPad 上不会在原始页面上调用。在 iPhone 上,由于它不是表单,因此它可以完美运行,此外,当我将 iPad 上的设置页面作为常规模式视图而不是表单调用时,它们都会被调用。请帮忙。谢谢!

【问题讨论】:

那么您可以使用委托来完成您想要在 viewDidAppear/viewWillAppear 中执行的任务。或者查看useyourloaf.com/blog/2010/5/3/ipad-modal-view-controllers.html 以了解 ModalViewController 工作原理的完整场景。 基本上,如果设置更新了任何值,我需要在屏幕上更新这些值,那么我该怎么做呢? 并且没有办法使用 viewDidAppear 做到这一点?我必须使用通知? 我会建议你使用委托。 你能告诉我如何实现吗? 【参考方案1】:

您可以在呈现之前将父视图控制器的值传递给模态视图(只需添加一个属性并保留引用)。当您在模态视图中完成后,调用父级上的一个方法(在这个方法中,您可以将需要传递给父级视图-(void)imDone:(NSObject yourValue) 的任何内容传递给 Parent (dismissViewController:Animated:)。

您可以在 iPhone 和 iPad 上使用这种方法。

希望对你有帮助。

【讨论】:

以上是关于在 iPad 上未调用 viewDidAppear 和 viewWillAppear的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 中的 searchBar 在 iPad 上的拆分视图上未正确显示

iOS iPad 上未显示 HTML5 视频播放按钮

iPad ios6中的方向问题

viewDidAppear 未调用但 viewWillAppear 调用仅出现在 iOS5

在 didFinishLaunchingWithOptions 之前调用 viewDidAppear

在 viewDidAppear 中无限调用 presentViewController