繁体   English   中英

通用应用程序的命名约定

[英]Naming conventions for Universal Applications

我正在编写一个通用的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应用程序显然可以从您的iPhone应用程序中获得不同的UI结构和设计,但如果您可以尝试尽可能保持抽象,那么它真的是最好的。

我避免在视图控制器中使用平台名称。 我有:

FamilyViewController.h
FamilyViewController.m
FamilyViewController.xib (which is used for the iPad UI)
FamilyViewController~iphone.xib

你最有可能在iPhone和iPad上拥有令人难以置信的相似功能,或者如果不相同,你仍然会有很多重叠。

我也从不让我的视图控制器充当我的表控制器。 我将该功能保存在单独的对象中。 这样,如果iPhone应用程序在不同的屏幕上有2或3个表,但是iPad在同一屏幕上显示所有这3个表,您可以实例化每个表控制器,并且所有代码都是可重用的。

如果你想使用与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];

我不确定是否有一种标准的方法来处理这个问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM