2014-01-23 26 views
2

我需要將我的故事板定義爲我應用委託文件中的認證腳本的一部分 - 用於將相關數據傳遞到特定視圖。iOS - 邏輯檢測故事板的iPad/iPhone設備

所有的工作都很好 - 但通過以這種方式定義我的故事板,我覆蓋了所有設備(iPad或iPhone)的路徑,我希望我的應用具有通用性,並遵循依賴於設備的不同故事板 - 因此, d喜歡檢測設備並將相關的故事板ID應用於變量,以便正確的故事板運行並且驗證腳本仍然正常運行 - 但我不知道如何執行此操作。

這是我的代碼 -

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"ipad_story" bundle:nil]; 
UIViewController *controller; 
UINavigationController *navigationController; 

故事板可以包含邏輯來檢測設備並應用ipad_story或ipad_phon è?

回答

10

有兩種選擇,使用iOS device modifier~ipad,這樣你纔會有故事像main_story iPhone和main_story~ipad爲iPad。

或者,如果您需要在UIUserInterfaceIdiom檢測到它的代碼看起來:

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { 
    // iPad 
} else { 
    // iPhone 
} 

第一個選項應儘可能使用,如果你一定要做到在代碼中的第二個運算選項僅需要。

+0

乾杯@ rckoenes - 這工作,但上顯示iphone 5彷彿受限於iPhone4的比例 – Dancer

+0

那麼你可以通過正確設置自動佈局或使用Autoresize掩碼來解決這個問題。我從來沒有必要爲3,5「和4」設備設計特定的用戶界面。只需將屏幕調整爲屏幕大小即可。 – rckoenes

+0

夠公平 - 歡呼的幫助和最全面的答案! – Dancer

1
#define IS_IPHONE_5 (CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size, CGSizeMake(640, 1136))) 

UIViewController *homeViewController; 
if (IS_IPHONE_5) { 

} else { 

} 
-1

要檢測的iPad/iPhone:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; 

    } else { 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
    } 
+0

這就是你應該在文件'〜ipad'和'〜iphone'上使用設備修飾符。 – rckoenes

0
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) 
{  
     //iphone 
} 
else 
{ 
     //iPad 
} 
0

您需要加載正確的NIB的初始化,而不是viewDidLoad中。

- (id)init 

    if(thisDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad) 
    { 
     return [self initWithNibName:@"ViewControllerIpad" bundle:nil]; 
    } 
    else if ([[UIScreen mainScreen] bounds].size.height == 568) 
    { 
     return [self initWithNibName:@"ViewControllerIphone5" bundle:nil]; 
    } 
    else 
    { 
     return [self initWithNibName:@"ViewController" bundle:nil]; 
    } 
} 
0

使用這個宏

#define IS_IPAD  ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) 
1

如果你正在尋找一個快速的解決方案:

if(UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad) { 
    //iPad 
} 
else { 
    //iPhone 
} 
0
if ([[UIDevice currentDevice] userInterfaceIdiom] ==UIUserInterfaceIdiomPad) { 

    UIStoryboard *storyboard = 
    [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil]; 
} else { 
    [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 

}

+0

這是爲我工作。 –