ios – 在没有Interface Builder的情况下制作通用应用程序

概述我正在使用XCode 4.2,iOS 5,并希望制作一个通用应用程序,而不是使用Interface Builder,如本文 not using a MainWindow.xib所述. 我还想使用Kotan Code post中概述的技术来分离我的iPhone和iPad代码. 所以我有主要的appdelegate,appdelegate_iPhone和从它继承的appdelegate_iPad. 回 我正在使用XCode 4.2,iOS 5,并希望制作一个通用应用程序,而不是使用Interface Builder,如本文 not using a MainWindow.xib所述.

我还想使用Kotan Code post中概述的技术来分离我的iPhone和iPad代码.

所以我有主要的appdelegate,appdelegate_iPhone和从它继承的appdelegate_iPad.

回到XCode 4.0(以及Kotan的帖子中),使用了相应的appdelegate,因为有一个与之关联的MainWindow_iPhone.xib(或MainWindow_iPad.xib).如果我没有使用.xibs,我如何以编程方式转到正确的appdelegate?

(我希望解决方案不涉及if(UI_USER_INTERFACE_IdioM()== UIUserInterfaceIdiomPad){}等)

解决方法 看看你的main.c文件,它应该包含这样的语句:

int retVal = UIApplicationMain(argc,argv,nil,nil);

其中UIApplicationMain定义为:

int UIApplicationMain (  int argc,char *argv[],Nsstring *principalClassname,Nsstring *delegateClassname);

所以,你只需执行:

int retVal = UIApplicationMain(argc,<YOUR_DELEGATE_CLASS_name>);

并且您的程序将使用该委托类而不是在nib中定义的委托类.

还要考虑编辑info.pList文件,在那里你应该删除你在那里找到的主要nib文件的所有条目,否则如果从项目中删除x​​ib文件,你的程序就会崩溃.

编辑:我很晚才意识到你也在询问如何区分iPad和iPhone …并希望这不涉及检查UI_USER_INTERFACE_IdioM()== UIUserInterfaceIdiomPad.

AFAIK,UI_USER_INTERFACE_IdioM是这样做的官方方式.实际上,如果您检查该宏的定义,您将看到它基于UIDevice类,该类返回有关您运行程序的设备的信息.所以,我没有看到任何不好的东西.

另一种方法可能是使用UIDevice本身,或UIDevice-Extension,这是一个扩展UIDevice的框架.

编辑2:

对于您在评论中提出的问题:

1) If there are .xibs,I don’t need to specify UI_USER_INTERFACE_IdioM
(as per Kotan’s post linked above). Must I choose between nibs and
this if statement?

我认同;要么在xib级别执行,要么以编程方式执行.

2) Are you suggesting I put the if statement to track the device in
main.m? It’s true,it does work there. Note the change in XCode 4.2:

return UIApplicationMain(argc,NsstringFromClass([AppDelegate class]));

如果以编程方式执行,则必须在需要的地方执行此 *** 作.

可能,应用程序委托是应用程序的一部分,不依赖于设备,因此您不需要为iphone实例化一个,而为ipad实例化另一个.我指的是,如果你没有提供一个笔尖,你应该指定一个委托,它只是为你的应用程序定义一个高级入口点.

在你的应用程序中:dIDFinishLaunchingWithOptions :(应用程序入口点)然后你应该创建你的UI,即创建你将在nib中定义的那些对象(控制器,视图,等等;一个nib只是一个可视化的机制) “创建”并连接对象;如果不是以可视方式进行,则以编程方式进行并连接它们;现在,这些对象中的一些确实依赖于设备(即视图),而其他对象则不依赖于设备.对于前者,您可以使用UI_USER_INTERFACE_IdioM检查来决定实例化它们的类.

或者,您可以有两个不同的委托类,一个用于创建iphone UI,另一个用于创建ipad UI;这也是一种非常合理的方法.它主要取决于您的应用程序的复杂性以及您愿意接受的权衡.

这或多或少是我看待事物,为可能迂腐道歉,但我希望我能说清楚.

如果您的应用程序周围有很多ifs,您还可以定义一个“装饰器”函数(例如:decoratedClassnameFromGenericclassname:(Nsstring *),不要介意详细)隐藏在其中UI_USER_INTERFACE_IdioM或将来可能出现的任何其他“装饰”需求…

总结

以上是内存溢出为你收集整理的ios – 在没有Interface Builder的情况下制作通用应用程序全部内容,希望文章能够帮你解决ios – 在没有Interface Builder的情况下制作通用应用程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1037187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存