2011-03-03 35 views
0

如果我有一個通用應用程序(可在iPhone上運行iPhone & iPad),如果設備之間的用戶界面不同,如何解決代碼中UI佈局的差異?iPhone SDK:如何解釋UI佈局差異,iPhone vs iPad?

如果我使用XIB,我可以簡單地根據設備加載不同的XIB並使用相同的代碼。正確?

如果我以編程方式創建我的UI,但是,應如何處理?有沒有比通過代碼和查看設備類型的方式更好的方法?我明白這是可行的,它看起來並不很優雅。

if (isiPhone) 
{   
    UIView *myCommonView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 150.0, 50.0)]; 
    myCommonView.backgroundColor = [UIColor colorWithPatternImage:iPhoneSpecificImage]; 
    // bunch of other conditional code 
} 
else 
{ 
    UIView *myCommonView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 250.0, 150.0)]; 
    myCommonView.backgroundColor = [UIColor colorWithPatternImage:iPadSpecificImage]; 
    // bunch of other conditional code 
} 
+0

這是代碼在視圖控制器?通常,「控制器」是業務邏輯和視圖之間的中介。是否需要在一個對象中使用這兩種類型? – Rob 2011-03-03 23:34:04

回答

1

使用if/else語句加載的一個更好的替代方法是擁有多個應用程序委託。一個簡單的方法是創建一個AppDelegate_iPhone的AppDelegate_iPad並分別綁定它們(在IB中)到啓動時加載的不同XIB。現在您可以通過編程方式向每個代理添加不同的項目。

這也可能導致您想要在代表之間共享UI元素的問題。在這種情況下,您可以創建兩個委託使用的共享視圖(只需在兩種情況下導入視圖控制器)。

該代碼在結構上應該類似於this

0

不幸的是,programmaticaly if/elsing是唯一的方法來做到這一點。但是當你想到它並不是那麼糟糕。 Apple允許您爲2個不同的設備使用相同的代碼生成2個不同的應用程序。