微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

容器的ViewController与iPad应用程序上的单个自定义ViewController

如何解决容器的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 举报,一经查实,本站将立刻删除。