我正在将现有的 iPhone 应用程序转换为 iPad 应用程序。iPhone 应用程序是使用容器视图控制器 (UINavigationController) 构建的,它首先向用户展示了一个自定义视图控制器 (UITableViewController),该视图控制器基于行选择推送了一个自定义视图控制器 (UIViewController)。
在 iPad 应用程序中,我直接向用户展示了自定义 UIViewController(没有容器控制器),然后允许通过 UIPopoverController 选择不同的选项。在 myAppDelegate.m 中,我只是使用以下方法将自定义 UIViewController 添加到窗口:
[window addSubview:[myCustomViewController view]];
在 myCustomViewController.m 中,我通过在 viewWillAppear 中注册方向更改通知来大量修改视图:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}
然后我在 didRotate: 方法中测试方向并得到非常奇怪的结果。仅仅加载视图就被调用了三遍?它似乎还报告了与视图的先前绘图相对应的方向?
- (void) didRotate:(NSNotification *)notification
{
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {
NSLog(@"Portrait");
} else if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
NSLog(@"Landscape");
}
}
我正在阅读文档,似乎将子视图添加到窗口(没有容器类)不会导致调用 viewWillAppear: 方法,但在我的情况下,它似乎正在被调用,只是不可靠。
我应该为这个应用程序使用其他模式吗?我只是想加载一个自定义视图并使用两个弹出框控制器(没有其他导航)?
- 井架
顺便说一句 - 如果我将自定义 viewController 推送到我的应用程序委托中的 UINavigationController 上,它会完全正常工作。我只是不需要这个应用程序的导航控制器。