如何将 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