通用应用程序的命名规范

7

我正在编写一个通用的iOS应用程序(适用于iPad和iPhone),发现自己需要使用非常长的类名,这些类名不能在两个应用程序之间共享:

FamilyViewController_iPhone.h/m
FamilyViewControllerA_iPad.h/m

DetailViewControllerB_iPhone.h/m
DetailViewControllerB_iPad.h/m

同样,这些类内部的名称包括设备名称,主要是为了方便Interface Builder使用。

我考虑过像AControllerA.h和BControllerA.h这样的命名方式,其中A表示iPhone,B表示iPad,但对此选项并不感到兴奋。

在iOS通用应用程序中,这种类的惯例是什么 - 或者我(希望如此)是否遗漏了可以避免这种必要性的东西?


词语 :) 所以 - 驱动程序是这样的...我想利用iPad独特的功能。我不想把iPad的应用程序局限于看起来像iPhone的应用程序,只是因为代码更容易管理。所以,没有假设,应用程序可能看起来不同,行为不同,并且具有不同的屏幕流/向导等 - 这就是事物的本质。我想我可以为类使用完全不同的名称,甚至不尝试在类名称中识别常见功能... - Luther Baker
3个回答

4
我认为你将功能分开是走了一条错误的道路。虽然iPad应用程序的UI结构和设计显然可以与iPhone应用程序不同,但最好尽可能保持抽象。
我避免在我的视图控制器中使用平台名称。我会这样写:
FamilyViewController.h
FamilyViewController.m
FamilyViewController.xib (which is used for the iPad UI)
FamilyViewController~iphone.xib

你很可能会在iPhone和iPad上拥有非常相似的功能,或者即使不同,也会有很多重叠部分。
我从不让我的视图控制器充当表格控制器。我将该功能保留在单独的对象中。这样,如果iPhone应用程序在不同屏幕上有2或3个表格,但是iPad在同一屏幕上显示这3个表格,您只需实例化每个表格控制器,所有代码都可以重复使用。

我担心会出现这样的使用情况,即iPad的详细视图与iPhone的详细视图大相径庭。我经常在iPhone上使用UITableView作为编辑器模板,但通常不会在iPad上这样做。将管理UITableView的逻辑推入还要管理基于更大屏幕XIB的iPad编辑器的View Controller中是非常困难的。为了利用iPad更大的屏幕,我经常需要使用非常不同的逻辑和屏幕流程。像您描述的那样重用相同的类并不总是很干净。 - Luther Baker
首先,我从不将表格的数据源和委托代码放入视图控制器中。我发现这只会带来痛苦。将数据源和委托拆分到一个单独的类中。是的,有时功能非常不同。如果是这样,我会创建两个IBAction方法,并将一个绑定到iPhone xib,另一个绑定到iPad xib。这些方法中的功能无疑仍然共享一些位,我确保将它们拆分成单独的方法,以便可以从两个IBAction方法中调用它们。 - Kenny Wyland

2
如果您想在 YourClass.xib 和 YourClass-iPad.xib 中使用相同的类 YourClass,则请查看我使用的以下宏:
#define getXIB(s) ( (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? @"" #s "-iPad" :@"" #s )

因此,您可以使用类本身来获取正确的XIB文件:

YourClass * viewController = [[YourClass alloc] initWithNibName:getXIB(YourClass) bundle:nil];

1

我不确定是否有标准的处理方法。

一种可能的方法是使用类簇的策略。如果FamilyViewController_iPad和FamilyViewController_iPhone非常相似,则将它们作为抽象FamilyViewController类的子类。设置FamilyViewController的-initWithNibName:bundle:方法,使其返回...iPad或...iPhone版本的实例,具体取决于应用程序正在运行的设备。在大多数代码中,您仍然需要在nib中使用子类名称,但至少您的代码将更易于阅读。


是的 - 这绝对是我的起点。只是不确定当您拥有一个 EditorView 时是否有标准做法...在两个平台之间存在巨大差异(iPhone 可能使用 UITableView,而 iPad 可能使用自定义 XIB,所有字段都像表单一样布局)。 - Luther Baker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接