在 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 上的拆分视图上未正确显示
viewDidAppear 未调用但 viewWillAppear 调用仅出现在 iOS5