UIModalPresentationFullScreen在UniversalApplication中给出错误

时间:2010-09-17 10:09:23

标签: iphone

我创建了Universal应用程序,因为我使用了UIModalPresentationFull,用于在iPad中显示MFMailComposerSheet,这有助于我在ipad的横向视图中显示MailComposer视图的全屏。当我在ipad模拟器中运行应用程序时,我运行良好。如果我将它设置为iPhone模拟器3.0或3.1.3它显示错误,如“错误:'UIModalPresentationFullScreen'未声明(在此功能中首次使用)”当我评论它并在iPhone模拟器中运行时它的工作原理什么是这个错误的解决方案,或者,是否任何方法替换“UIModalPresentationFull”在ipad和iphone中都有效?

谢谢和问候 Venkat

2 个答案:

答案 0 :(得分:0)

UIModalPresentationFullScreen仅在3.2(及更高版本)SDK中可用,因此您无法使用低于此值的SDK进行编译。

但是,您不需要使用通用应用程序 - 您可以针对要运行的最高SDK进行编译,然后必须在运行时检查您使用的方法/类是否可用。您在构建设置中设置了此项:基本SDK 应设置为您使用的最高SDK(iPad可能为3.2), iPhone OS部署目标应设置为3.0 - 代码可以运行的最低SDK。

每次使用3.2位代码时都应该这样做:

if ([controller respondsToSelector:@selector(setModalPresentationStyle:)])
    [controller setModalPresentationStyle:UIModalPresentationFullScreen];

然后,即使你已经编译了3.2 SDK,当你在较低的SDK设备上运行时,这个方法也不会运行。

我在仍然有3.0 SDK的iPhone上测试了这个。我不确切地知道如何使用较低的SDK对模拟器进行测试。

答案 1 :(得分:-1)

enter code here

使用条件编译块我们可以隔离iPhone和iPad的过程

“#if __IPHONE_OS_VERSION_MAX_ALLOWED> = 30200”

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    // The device is an iPad running iPhone 3.2 or later.
    if ([picker respondsToSelector:@selector(setModalPresentationStyle:)])
    {
        //picker.modalPresentationStyle = UIModalPresentationFullScreen;
        [picker setModalPresentationStyle:UIModalPresentationFullScreen];

    }
}

“#endif”

请删除引号并使用if和else部分......(即)条件编译块