分类: IOS2012-10-31 17:04 5154人阅读 评论(0) 收藏 举报ios
记得几个月前刚接触ios时,由于要急着完成任务,搭建应用的方式彻底按照书本,而书本讲的是xcode3,而装的xcode的版本是4。因此,书上的一些东东和xcode的版本对不上,很是苦恼,为了建立一个windows base 的project,都费劲了心思。windows
过了几个月,回到来想一想当初的问题,无非是没有理解xib的原理,没有弄清楚在ios里,若是经过xib来建立对象。xcode
对于xib建立对象,能够从启动开始。咱们来看看windows base project的作法和 single view project的作法。iphone
一:对于 window base 的建立步骤:函数
第1步:将建立的xib设置为启动frame。这个能够在 target>>summary>>main interface中设置。ui
这有点至关于将应用的启动入口设置为本xib。spa
第2步:这个启动xib的file owner必定是 UIApplication。但真正的全局AppDelegate是哪一个呢?.net
那就须要你在xib中新建一个Object,而后把类名设置为您的真正的启动代理类:xxxx_AppDelegate设计
注意:这里须要将启动类绑定到 file owner的delegate。(和UI元素的绑定方法同样)。代理
咱们再看看main函数:
int retVal = UIApplicationMain(argc, argv,nil, nil);
这里没有指定启动的代理类。我猜测最后一个参数不设置的话,就会从启动xib中的UIApplication.delegate来指定。
第3步:继然是window base,那你固然须要在启动xib中建立一个window。
建立的window与代码如何对应呢?通常咱们是在 xxxx_AppDelegate中建立一个UIWindow。
而后在xib中将window与代理中的实例链接上,而后代码中就直接用了,和使用一个控件同样。
这样,程序一启动,就建立了一个UIWindow。不须要你写UIWindow的建立代码。
第4步:做为一个UI程序,应该会有界面逻辑,而界面须要包含在UIViewController中,
因此,你能够在启动xib中建立UIViewController,绘制你的界面。或者直接关联别一个nib文件。
固然,你要使用它,仍然须要在xxxx_AppDelegate中声明UIViewController中的对象viewController,而后在xib中创建链接。
注意:这种方式下,UIViewController是自动建立的,不须要你写建立的代码。
最后一步:通过上面的动做。在启动代理的启动方法didFinishLaunchingWithOptions中添加如下代码就搞定了。
[window addSubview:viewController.view];
[window makeKeyAndVisible];
按照上面这种方式,咱们的启动界面没有使用 alloc来建立任何ui对象,全部ui对象都是经过xib加载时自动生成的。
须要注意的是,这种方式,须要将xib设置为 main interface。若是您的程序是iphone和ipad适应的,那能够设置两个不一样的启动xib.
若是在xcode4中要建立 window base project,差很少就上面的套路。靠xib来生成window和viewController.
注:我也见到过没有设置main interface的程序,而且在main中也没有设置AppDelegate类。我猜测,默认为使用MainWindow.xib作为
启动Interface。好象书中的hello_world就是这样的。
二:再看看single view project的建立方式。
第1步:固然,咱们不能设置 main interface。咱们须要看看main函数。在其中设定启动代理类。
UIApplicationMain(argc, argv,nil, NSStringFromClass([SingViewTest_AppDelegateclass]));
在这里,第4个参数咱们指定了启动的AppDelegate,而不是象上面那样,经过xib来指定启动代理类。
第2步:在启动方法中,自行建立window
self.window = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]] autorelease];
上面的代码建立一个全屏的窗体,看看,是咱们自已alloc的。
第3步:经过程序来建立 SingelView的viewControoler.
self.viewController = [[[SingViewTest_ViewControlleralloc] initWithNibName:@"SingViewTest_ViewController"bundle:nil]autorelease];
若是您的viewController想经过xib来加载(一般的方式),那就采起上面的方式。
若是您不想使用 UI 设计器,你也能够
MyViewController *vc = [[ MyViewControlleralloc] init];
固然,这种状况你须要在viewdidLoad中动态生成您的ui元素。
最后一步:将viewcontroller的ui显示出来。
self.window.rootViewController =self.viewController;
[self.windowmakeKeyAndVisible];
经过上面两个工程的建立,能够看出,ios提供两个启动入口的方式。
方式一:指定xib作为启动interface,这种方式下,须要自已指定启动AppDelegate。
能够经过建立 object,而后改类名,再绑定的方式。
这种方式下,能够以此为起点,将真正的启动window,启动ViewController在此处建立和链接。
对于简单的应用,咱们还能够在这个启动的xib里,将启动的ui都画好。
方式二:在main中指定启动AppDelegate。
这个须要修改 main函数中 UIApplicationMain方法的最后一个参数。
这种方式下,启动的windows,viewController须要自已经过alloc来生成,后面的作法和方式一就没啥区别了。
写得很乱,主要是加深一下自已的记忆。