2013-12-19 47 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; 
} 
相关问题