2010-06-18 88 views
0

如何在通用应用程序中访问共享委托或设备特定的“委托”?访问共享委托人的iPhone/iPad委托?

我想在共享委托上存储属性并在其中放置基本逻辑,但是如果我想要这么做,请在iPhone委托中说出iPhone的具体内容,我会假设我需要分别访问这两个委托。它是否正确?

如何在代码中访问这些代表?

回答

4

我不确定您的设备特定代表的含义。我假设你通过“共享委托”来引用你的应用程序委托。如果您需要具体到iPhone或iPad的东西,你可以这样做:

BOOL isiPad = NO; 
if ([UIDevice instancesRespondToSelector:@selector(userInterfaceIdiom)]) { 
    UIUserInterfaceIdiom idiom = [[UIDevice currentDevice] userInterfaceIdiom]; 

    if (idiom == UIUserInterfaceIdiomPad) { 
     isiPad = YES; 
    } 
} 

if (isiPad) { 
    // iPad-specific stuff 
} else { 
    // iPhone-specific stuff 
} 

这比使用#define好多了,因为你可以编译一个通用的应用程序在所有iOS设备的工作。

编辑:增加了一些内省,以防止在iPhone OS 3.1.x和更早版本上崩溃。谢谢,巴斯蒂安。

+0

在为iPad更新旧项目时,XCode会创建一个共享委托。我认为一个新的通用应用程序也是这样做的。显然不是。我的错。 – Moshe 2010-06-18 19:10:24

+0

请注意,这会在3.1.x设备上崩溃,因为userInterfaceIdiom在那里不存在。 如果currentDevice有这个选择器,你必须首先检查。 – Bastian 2010-08-05 06:21:47

+0

我只是检查了一遍,有一个定义,你可以在UIDevive.h使用已定义: 的#define UI_USER_INTERFACE_IDIOM()([的UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] [的UIDevice currentDevice] userInterfaceIdiom] :UIUserInterfaceIdiomPhone) – Bastian 2010-08-05 06:29:29