如何在单独的类中创建通用 Iphone/Ipad 应用程序?

Posted

技术标签:

【中文标题】如何在单独的类中创建通用 Iphone/Ipad 应用程序?【英文标题】:How to Create Universal Iphone/Ipad App in Separate Classes? 【发布时间】:2012-05-03 02:24:25 【问题描述】:

我正在为 Iphone 和 Ipad 创建一个通用应用程序。但我不需要为 Iphone 和 Ipad 上相同的课程。我需要为每个 Iphone 和 Ipad 开设单独的课程。任何人都可以给我一个想法如何做到这一点?我已经使用 Xcode 4 创建了我的应用程序。但是当我在那里创建一个新项目时,它会为两个设备生成一个类文件和 Nib。为了我的目的,我不需要那样做。

EX : 我需要这两种设备的类文件

IphoneviewController.h
IPhoneviewController.m

IPadviewController.h
IPadviewController.m

one Xib

UniversalviewController.xib

感谢并期待快速回复。

【问题讨论】:

在 iPhone/iPad 上使用通用的 xib 文件并不是一个好主意,因为它们的大小不同,这会给您保持设计的一致性带来问题。 是的,我知道,但客户希望这样...... 看来您违反了 MVC 规则。 2个视图控制器一个视图?两个控制器之间的冲突,应该控制视图? 是的,它违反了 MVC 规则。但它应该有一种方法来检测设备类型并根据它检测类。如果是 Ipad,我们可以为笔尖分配相关的类,对于 iphone 也是如此。 【参考方案1】:
BOOL isIPhone = (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad);

只要判断它然后使用你的单独的类来显示不同的视图

添加:

对不起,我不使用任何 xib|nib 来构建我的应用程序,我使用纯代码 但我认为您不能将一个 xib 与 2 个视图控制器一起使用

只需为每个视图控制器创建 2 个 xib 或将代码合并到一个视图控制器中 就像上面的代码

【讨论】:

【参考方案2】:

如何在您的 applicationDidFinishLaunch 中执行以下操作:

UIViewController * viewController;
if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) 
  viewController = [[IphoneviewController alloc] initWithNib: "UniversalviewController"];
 else 
  viewController = [[IPadviewController alloc] initWithNib: "UniversalviewController"];

//now use your VC however it is appropriate for your app, such as...
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];

顺便说一下,关于 MVC 的讨论,假设你需要两个不同的 viewControllers 用于两个平台,你可以通过创建一个包含几乎所有内容的共享类来共享公共代码,将其导入每个,然后只实现或覆盖 ipad 特定版本中需要特定于 iPad 的任何内容。

例如,这是您的 IPadviewController 的 .h...

#import "viewController_Shared.h"

@interface IPadviewController : viewController_Shared 


【讨论】:

AppDelegate中如何调用视图控制器?

以上是关于如何在单独的类中创建通用 Iphone/Ipad 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JPA 中创建通用查询?

iOS 单元测试通用应用程序

在 Room 中创建通用 DAO 接口时,“参数的类型必须是带有 @Entity 注释的类”

如何在 iOS 中创建服务?

iPhone iPad 蓝牙传输

如何制作以编程方式使用 UISplitViewController 和 UINavigationController 的通用 iPhone / iPad 应用程序?