Apple現在爲您提供了一個默認機制,以便在同一個項目中分離iPhone和iPad之間的代碼。
在Xcode 4中,當您創建新的「基於窗口的應用程序」或「基於視圖的應用程序」時,您可以選擇選擇「設備系列」。如果您爲此選項選擇「Universal」,則Xcode將創建3個應用程序代理。
首先,主應用程序的委託:
YourAppNameAppDelegate : NSObject <UIApplicationDelegate>
和另外兩個應用程序代表(放置在不同的組)是「YourAppNameAppDelegate」的子類:
YourAppNameAppDelegate_iPhone : YourAppNameAppDelegate
YourAppNameAppDelegate_iPad : YourAppNameAppDelegate
當你運行你的應用程序無論是iPhone還是iPad模擬器(或設備),應用程序都會根據所選設備自動使用_iPhone或_iPad應用程序委託子類。
如果重寫應用中:didFinishLaunchingWithOptions:在每個子類中的方法,你會看到這樣的工作:
// In YourAppNameAppDelegate_iPhone.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"iPhone App Delegate");
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
// In YourAppNameAppDelegate_iPad.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"iPad App Delegate");
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
這給你一個起點,在那裏你可以根據設備的用戶是對改變程序流程。例如通過實例化主視圖控制器的其中一個子類(如下所述)。
當您將新的視圖控制器添加到您的項目中時,您應該通過創建一個通用控制器超類以及iPhone/iPad特定的子類繼續此範例。請注意,通用超類不應該有與它們相關聯的nib文件,而子類應該各自擁有自己的獨立筆尖。
這樣你就可以在三個類之間分解代碼,在超類中保留與平臺無關的東西 - 例如一些屬性,方法,IBOutlets和IBActions - 並將特定於平臺的實現放入子類中。
看起來很酷,但當iPad 3或4具有視網膜顯示,然後你被@ HD @ 2x卡住時會發生什麼。這會是一團糟。 – Moshe 2011-04-11 00:28:35