【问题标题】:Single NIB for iPhone and iPad适用于 iPhone 和 iPad 的单笔尖
【发布时间】:2013-12-19 06:27:07
【问题描述】:

我已经在这里和 Google 看到了类似的问题,但没有人回答我的实际问题。我想要一个适用于 iPhone 和 iPad 的 NIB。 NIB 本身应该只有一个空视图。应该进入视图的所有内容都以编程方式完成。我检查设备是否为 iPhone/iPad,然后计算并设置布局。多做一点工作,但对于所需的任务,这对我来说是最好的解决方案。

但是当通过“新文件... -> 用户界面 -> 视图”添加新视图时,系统会要求我提供设备系列。选择当然是 iPhone 或 iPad。但我希望视图在两种设备上都能正常工作,有点通用。

我尝试了 iPhone 视图,它实际上适用于 iPhone 和 iPad 两种设备。所以似乎一切都很好。我的问题更笼统,询问是否可以为 iPad 重新使用 iPhone 视图。我要换一种方式吗?有更好的解决方案吗?

请理解,我真的想使用单一视图并以编程方式工作,因此请忽略为每个设备使用单独视图并使用 IB 的解决方案!!!

谢谢

【问题讨论】:

  • 如果您以编程方式创建视图而不是通过编程方式创建视图本身,不是吗?
  • 不能同时使用一个笔尖,如果你想使用通用编码,那么你可以使用我们 -(void)loadView;方法。

标签: ios iphone objective-c ipad xcode5


【解决方案1】:

如果您以编程方式创建所有内容,则根本不需要笔尖来创建空视图。

你的 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];

【讨论】:

    【解决方案2】:

    首先你可以用 AutoResize 来做这件事 > 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      相关资源
      最近更新 更多