如何解决容器的ViewController与iPad应用程序上的单个自定义ViewController
|| 我正在将现有的iPhone应用程序转换为iPad应用程序。 iPhone应用程序是使用容器视图控制器(UINavigationController)构建的,该容器首先向用户提供了一个自定义视图控制器(UITableViewController),该视图控制器根据行选择推送了一个自定义视图控制器(UIViewController)。 在iPad应用程序中,我直接向用户展示自定义UIViewController(带有NO容器控制器),然后允许通过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:方法被调用,但就我而言,它似乎正在被调用,只是不可靠。
我应该为此应用程序使用其他模式吗?我只是想加载一个自定义视图并使用两个弹出框控制器(没有其他导航)?
-德里克
btw-如果我将自定义viewController推送到我的应用程序委托中的UINavigationController上,它将完全正常工作。我只是不需要此应用程序的导航控制器。
解决方法
在我正在开发的应用程序中,我首先拥有一个属性来确定设备是否为iPad:
- (BOOL)iPad {
return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? YES : NO;
}
然后,您可以使用以下视图委托方法。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (self.iPad) {
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
//do some stuff
}
}
希望这可以帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。