如何将 iOS 项目更改为根本不使用 nib 而只使用 Objective-C 代码?

Posted

技术标签:

【中文标题】如何将 iOS 项目更改为根本不使用 nib 而只使用 Objective-C 代码?【英文标题】:How to change an iOS project to not use the nib at all and just work with Objective-C code? 【发布时间】:2012-05-20 10:05:42 【问题描述】:

在 Xcode 4.3.2 上创建单视图应用程序后,我们可以做几件事来使项目完全不使用 .nib.xib)?

现在我们可以点击.xib并将其在Xcode中的自定义类更改为我们的FooView类,并在initWithCoder而不是initWithFrame中进行初始化,.xib仍在使用中,但是几乎没有修改。

我们是否可以更改一些内容以使 .xib 完全不使用,而代码将使用 initWithFrame

【问题讨论】:

您为什么要这样做?这当然是可能的,但不是一个好主意。 为什么不呢?因为我实际上很习惯在 Cocoa Touch 应用程序或 Cocos2d 应用程序中通过 Objective-C 代码布置所有 UI 小部件 一般的想法是,如果可能的话,最好依赖配置而不是代码。阅读依赖注入。 也就是说,如果应用程序要在 iPhone 上运行,那么一个 .xib 会处理它(在运行时),如果在 iPad 上运行,那么另一个 .xib 会处理它,所以目标-C 代码不会一团糟? (我们的产品经理、项目经理或 UI/图形设计师也可以在不接触 Objective-C 代码的情况下编辑 .xib 文件...? 【参考方案1】:

-创建单视图应用程序 -删除自动创建的.xib文件 -打开自动创建的视图控制器,覆盖-loadView方法:

-(void)loadView

    self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease]; //If using ARC you must remove autorelease

【讨论】:

它编译并运行,但它根本不使用FooView.h.m 哦,你有一个单独的视图...然后用你的视图初始化 self.view:self.view = [[FooView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease]; 哦,我们不总是有一个单独的视图吗?我总是有一个,这样我就可以实现那个类的drawRect 并不总是视情况而定。例如,如果我想创建一个具有视图的视图控制器,其视图层次结构仅包含标准 UIKit 控件(标签、文本字段、按钮......)我实际上不需要覆盖 drawRect: 方法,因此我只是创建一个空白视图,如我在答案中的示例中所示。否则,就像您的情况一样,您有一个自定义视图并对其进行初始化。这里重要的是覆盖-loadView 方法,该方法为self.view 提供根视图...

以上是关于如何将 iOS 项目更改为根本不使用 nib 而只使用 Objective-C 代码?的主要内容,如果未能解决你的问题,请参考以下文章

在 Nib 而不是 Storyboard 中创建 UITabBarController

IOS:如何将UITabbar的位置更改为视图顶部

iOS 7 将 UIView 更改为 UITableView

如何将Apache的默认编码更改为UTF-8?

如何将刷卡器中的分页项目符号更改为文本?

从情节提要中提取 nibs/xibs (iOS)