2010-06-18 87 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