2013-12-19 80 views
4

我在這裏看到類似的問題,但Google卻沒有回答我的實際問題。我想爲iPhone和iPad都提供一個NIB。 NIB本身應該只有一個空視圖。應該進入視圖的所有內容都是以編程方式完成的。我檢查設備是iPhone/iPad,然後計算並設置佈局。多一點工作,但對於所需的任務,這對我來說是最好的解決方案。適用於iPhone和iPad的單人NIB

但是,當通過「New File ... - > User Interface - > View」添加新視圖時,系統會詢問設備系列。這些選擇當然是iPhone或iPad。但我希望該視圖能夠在兩種設備上工作,通用類型。

我試過iPhone視圖,它實際上在兩個設備,iPhone和iPad上都能正常工作。所以似乎一切都很好。我的問題是更一般的詢問是否可以重新使用iPad視圖的iPhone視圖。我應該以不同的方式做嗎?有更好的解決方案

請理解,我真的想用單一視圖和編程方式工作,因此對於每個設備使用單獨視圖和使用IB的解決方案都應該保留!

感謝

+1

如果以編程方式創建視圖的程度超過您可以以編程方式創建視圖本身,對不對? – Suryakant

+0

不能使用一個單一的筆尖,如果你想使用通用編碼,那麼你可以 - (void)loadView;方法。 –

回答

5

如果以編程方式創建的一切,沒有必要爲一個筆尖都創建一個空的觀點。

你的UIViewController子類應該是這樣的

@implementation MyViewController 
-(void)loadView 
{ 
    //Do not call [super loadView] in your implementation. 
    //The super implementation loads the nib based on the nibName and nibBundle properties. 
    UIView * view = [[UIView alloc] init]; 
    //Add subviews, etc 

    //You must assign a UIView object to the view property before loadView completes 
    self.view = view; 
} 
@end 

您可以使用以下任何格式實例化視圖控制器:

MyViewController * controller = [[MyViewController alloc] initWithNibName:nil bundle:nil]; 
MyViewController * controller = [[MyViewController alloc] init]; 
MyViewController * controller = [MyViewController new]; 
0

首先,你可以做這件事情有了自動調整>LINK

如果它變得很複雜,那麼你可以使用下面的函數,並以編程方式自己做。

-(int)setScreenOf 
{ 

    int size=0; 
    if((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)) 
    { 
     //ipad 
     size=3; 

    } 
    else 
    { 

     CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
     if (screenBounds.size.height ==568) 
     { 
      size=2; 
      // code for 4-inch screen   
     } 
     else 
     { 
      size=1; 
      // code for 3.5-inch screen   
     } 
    } 
    return size;  
} 

或者如果你想做一個設備版本特定的代碼,然後試試這個。

-(NSString *)deviceVersion 
{ 
    size_t size; 
    sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
    char *answer = (char*)malloc(size); 
    sysctlbyname("hw.machine", answer, &size, NULL, 0); 
    NSString *platform = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding]; 
    free(answer); 
    NSLog(@"Platform: %@", platform); 
    return platform; 
} 
相關問題