文档章节

对iOS多视图开发的补充(针对XCode4.2开发环境,Empty Application没有...

jackyyang
 jackyyang
发布于 2012/07/29 19:07
字数 873
阅读 155
收藏 0

昨天参照书中的例子,回到家后开始实现示例中的代码.

发现XCode4.2中没有Window Base Application这一选项.使用Empty Application没有主界面的Storyboard文件.

于是打开google,发现Jeroen Trappers有一篇文章有详细的解决方法.

地址:http://www.trappers.tk/site/2011/06/16/mainwindow-xib/

 

我的看法是(不一定准确):AppDelegate是个代理类,起类似与window编程下的WNDPROC函数.

与其配合的是UIApplication.

在没有XIB文件的情况下,是通过程序的方式加载UIApplication的一个实例完成框架的建立的.

为了从XIB文件中加载,我们就要自己创建一个XIB文件,这是首先的问题.

如何将XIB文件和AppDelegate的类关联是下面的问题.

 

我们知道,AppDelegate需要一个UIApplition实例,这个事例保存所有XIB上元素的拷贝.所以File's Owner的类名我们要改为UIApplicaion

同时UIApplicaion有一个插座IBOutlet刚好是我们AppDelegate可以对接的.类型UIApplicationDelegate

于是我们首先拖放一个Object,修改类名为我们的xAppDelegate,这样就可以将这个Object和UIApplication中的delegate链接了.

delegate

The delegate of the application object.

@property(nonatomic, assign) id<UIApplicationDelegate> delegate

Discussion

The delegate must adopt the UIApplicationDelegate formal protocol. UIApplication assigns and does not retain the delegate.

Availability
  • Available in iOS 2.0 and later.
Declared In UIApplication.h

 

源文件中有UIWindow的变量 window ,我们需要在上面添加的Object(类名xAppDelegate)里面创建一个Window,然后把变量加上IBOutlet后进行链接.

这样就完成了XIB中AppDelegate和它下面Window的两个对象从XIB到代码之间的链接.

 

可是此时程序的入口并没有改变,文章中推荐的方式是在工程配置中的Main Interface修改为一个XIB文件名,其实就是在程序中加载XIB文件作为入口.

同样的功能,也许我们在代码中也可以实现.类似与initWithNibName的方法,暂时我没有实现.

 

还有就是注释掉了一个初始化的函数:- (BOOL) application:didFinishLaunchingWithOptions: 这个方法中的操作是跟我们从XIB加载相冲突的.

 

通过以上几个步骤,我们就可以从Empty Application中自定义的加载一个XIB文件了.

学习到这里,让我对整个XIB的工作方式和UIApplication的工作原理又有了更深一步的了解.

对于以后的多视图学习非常的有帮助.

 

以上操作的详细步骤如下,顺便复习一下:

1.创建Empty application,此时项目中只有一个AppDelegate的类

Start with Empty Application template

2.新建文件,选择User Interface下的Empty 命名为MainWindow

Add Empty Interface Builder document

3.打开新建的MainWindow.xib文件

The empty design surface of MainWindow.xib

 

4.将File's Owner的类名修改为UIApplication

Change class of File's Owner to UIApplication

5. 在Library中拖放一个Object到图下的位置

Add Object to the document

6.将该object的类名修改为文件中AppDelegate的类名(同时还可以给object命名下Label)

Change class of the object to xAppDelegate

7.拖放一个Window到左边

Add a window to the document

8. 在xAppDelegate的h文件中,给window的属性加上IBOutlet

@interface  DemoAppDelegate :
      UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) IBOutlet UIWindow *window;
@end

9.将File's Owner 和 拖放的Object按照以下方式连接

Link the application delegate

 

Link the window outlet of the app delegate

 

10.在项目属性中,把Main Interface修改成你的xib文件名MainWindow

Set the Main Interface to MainWindow

11. 在xAppDelegate.m文件中,将

- (BOOL) application:didFinishLaunchingWithOptions:

 

这个方法全部注释掉

 

以上在Lion 10.7.2 XCode4.2中测试通过.

--------------------- 我可以操纵冰冷的代码,但我操纵不了我的人生......

© 著作权归作者所有

jackyyang
粉丝 22
博文 42
码字总数 18506
作品 0
珠海
私信 提问
ArcGIS for iOS 开发系列(2) – 开发环境配置

我们已经掌握了一些基本知识,在动手编程之前,还需先配置下开发环境: 2.1 iOS 配置 1) Mac电脑(MacBook Air/ Pro、Mac mini和iMac都可以); 2) Snow Leopard(小版本10.6.2以上)、Lio...

长平狐
2012/11/28
1K
0
Apple Watch程序开发30分钟秒懂

苹果公司Apple Watch智能手表正在备受追捧,迅速掌握Apple Watch的APP架构,环境搭建,及实例开发将会让开发者占尽先机。我赢职场全国首发,30分钟玩转Apple Watch应用开发实例,让iOS爱好者...

Anthony_wmy
2015/03/09
3.6K
12
UIViewControllerHierarchyInconsistencyException异常

IOS中的MVC MVC模式是一种经典的软件架构模式,基本上懂程序设计的人都了解或应用过MVC模式。多数面向对象的程序设计架构都得益于MVC模式来有效的划分程序中的对象的角色,组织对象之间的耦合...

big军
2013/01/10
0
0
浅谈MVC、MVP、MVVM架构模式

在开发过程中,我们常常会针对一类问题而制定相关的处理方案,于是就有了相关的架构模式。目前主流的架构模式最主要就是MVC、MVP和MVVM这三种。 其实在不同的开发环境下,根据实际开发环境是...

安然若知
2018/06/04
0
0
学习如何针对iOS 7进行开发?

  iOS 7已经发布了六个测试版,除了beta 6进行了小幅修正外,其他几个测试版都有不小的改动。昨天有消息说苹果将在9月10日发布iOS 7正式版,那么GM版很快将会与开发者见面。在iOS 7来临前夕...

fangzhou99
2013/09/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

FPGA 设备 USB Platform Cable USB

lsusbFuture Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC

MtrS
今天
4
0
lua web快速开发指南(6) - Cache、DB介绍

"数据库"与"缓存"的基本概念 数据库与缓存是服务端开发人员的必学知识点. 数据库 "数据库"是一种信息记录、存取的虚拟标记地点的集合统称. 比如现实生活中, 我们经常会用到文件柜、书桌等等数...

水果糖的小铺子
今天
9
0
Oracle分页查询语句的写法

Oracle分页查询语句的写法 Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,Oracle分页查询语句基本上可以按本文给出的格式来进行套用。   Oracle分...

康师傅
昨天
5
0
java并发图谱

1527
昨天
2
0
Mybatis之拦截器Interceptor

使用mybatis时用PageHelper进行分页,用到了PageInterceptor,借此了解下mybatis的interceptor。Mybatis的版本是3.4.6,MybatisHelper的版本是5.1.3。 1、PageInterceptor 先上一段代码,如下...

克虏伯
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部