Ios 通用应用程序-如何使用?

Ios 通用应用程序-如何使用?,ios,xcode4.2,Ios,Xcode4.2,我正在使用Xcode 4.2并正在编写一个通用应用程序。在开始新项目时,我选择了SingleView应用程序模板。XCode添加了ViewController1.h、ViewController1.m、ViewController1_iphone.xib和ViewController1_iPad.xib。我需要添加更多UI并单击文件…新建…新建文件和选定的UIViewController子类模板,并看到两个复选框(针对iPad,用户界面为Xib) 我应该在这里做些什么来支持iPad和iPhone

我正在使用Xcode 4.2并正在编写一个通用应用程序。在开始新项目时,我选择了SingleView应用程序模板。XCode添加了ViewController1.h、ViewController1.m、ViewController1_iphone.xib和ViewController1_iPad.xib。我需要添加更多UI并单击文件…新建…新建文件和选定的UIViewController子类模板,并看到两个复选框(针对iPad,用户界面为Xib)

我应该在这里做些什么来支持iPad和iPhone,同时拥有共享相同代码的公共.h和.m文件。我是否需要在我的视图控制器中添加代码来检查它是iPad还是iPhone

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
} else {
}
此外,我还看到人们谈论~iPad和~iPhone。这是怎么回事

如果我理解正确的话,是否由于屏幕尺寸不同,我必须分别为iPad和iPhone设计UI

我完全搞糊涂了


请帮助。

我建议您将.xib文件移动到故事板,一个用于iPhone,一个用于iPad。它们为开发带来了很多乐趣,并且易于学习

然后,将自定义类分配给视图控制器,并将UI元素链接到代码。如果对两个故事板都这样做,那么它们可以通过引用公共的.h/.m文件共享相同的代码


在项目设置中,一旦应用程序配置为通用开发,您将为iPhone/iPad部署信息分配适当的故事板。

我建议将.xib文件移动到故事板,一个用于iPhone,一个用于iPad。它们为开发带来了很多乐趣,并且易于学习

然后,将自定义类分配给视图控制器,并将UI元素链接到代码。如果对两个故事板都这样做,那么它们可以通过引用公共的.h/.m文件共享相同的代码


在项目设置中,一旦应用程序配置为通用开发,您就可以为iPhone/iPad部署信息分配适当的故事板。

如何实现和构建东西或多或少取决于您,但我倾向于采用以下想法:

  • 忽略“iPad目标”和“带Xib”选项(除非不使用故事板。见下文)
  • 创建包含所有共享代码的父视图控制器。例如,主视图控制器
  • 为iPad和iPhone创建2个子类。例如,MainViewController_iPhone和MainViewController_iPad(您可以使用您提到的MainViewController~iPhone。这里只是命名偏好的问题)
  • 您希望在iPhone和iPad之间共享的任何代码,都要保留在MainViewController父类中,并且每个设备特定的任何代码都要放在相应的子类中
一般来说,如果你在iPhone或iPad上运行,你不应该真的需要测试。这并不是说这是错误的,您不应该这样做,但是通过像这样分离类,您不应该真的需要这样做。但我喜欢做的是,当我处理设备可以处理的方向时,检查我正在运行的设备,并将其放入共享父视图控制器中

至于你的用户界面,你有3个选择。 -使用故事板(我建议这样做) -使用单独的XIB文件 -手动编写所有代码

根据您现在对iOS的了解程度,手动编写所有代码可能会更有效,但很可能需要更长的时间。使用InterfaceBuilder很好,也很简单,尽管您想要进行的任何定制仍然需要在代码中进行,但这很好

我建议使用故事板,这样就不会有大量不同的XIB文件。它还简化了iphone和ipad之间的分离,因为您的界面只需要2个文件。其中一个将拥有iPhone的所有屏幕,另一个将拥有iPad的所有屏幕。iOS将在启动时自动加载正确的故事板,因此您无需执行任何操作。然后,要获取视图控制器和视图,可以执行以下操作:

MainViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainViewControllerIdentifier"];
请注意,标识符是在情节提要中指定的


希望这有点帮助,但如果你有更多的问题,请直接提问:)

这或多或少取决于你如何选择实施和构建,但我倾向于采用以下想法:

  • 忽略“iPad目标”和“带Xib”选项(除非不使用故事板。见下文)
  • 创建包含所有共享代码的父视图控制器。例如,主视图控制器
  • 为iPad和iPhone创建2个子类。例如,MainViewController_iPhone和MainViewController_iPad(您可以使用您提到的MainViewController~iPhone。这里只是命名偏好的问题)
  • 您希望在iPhone和iPad之间共享的任何代码,都要保留在MainViewController父类中,并且每个设备特定的任何代码都要放在相应的子类中
一般来说,如果你在iPhone或iPad上运行,你不应该真的需要测试。这并不是说这是错误的,您不应该这样做,但是通过像这样分离类,您不应该真的需要这样做。但我喜欢做的是,当我处理设备可以处理的方向时,检查我正在运行的设备,并将其放入共享父视图控制器中

至于你的用户界面,你有3个选择。 -使用故事板(我建议这样做) -使用单独的XIB文件 -手动编写所有代码

根据您现在对iOS的了解程度,手动编写所有代码可能会更有效,但很可能需要更长的时间。使用InterfaceBuilder很好,也很简单,尽管您想要进行的任何定制仍然需要在代码中进行,但这很好

我建议使用故事板,这样就不会有大量不同的XIB文件。它还简化了iphone和ipad之间的分离,因为您的界面只需要2个文件。其中一个将拥有你所有的
NSString *path = [[NSBundle mainBundle] pathForResource:@"setup" ofType:@"plist"];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
{
    storyboard = [UIStoryboard storyboardWithName:@"ViewController1_iphone" bundle:nil];
}
else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
{
storyboard = [UIStoryboard storyboardWithName:@"ViewController1_ipad" bundle:nil];
}