动态加载XIB 高级应用

Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有动态类型(Dynamic typing),动态绑定(Dynamic binding)和动态加载(Dynamic loading)。

而我今天与大家分享的就是关于动态加载的一些用法,其他两个想必也是经常用到的,在这也就不多说了。

所谓,动态加载,就是在程序运行当中,根据需要动态地加载一些视图,常常用在,游戏等多视图的应用中,当然如果有需要,可以用在任何场景中。

动态加载用到的一个类就是NSBundle UIKit Additions Reference对NSBundle的一个扩展。

其中只有一个方法:– loadNibNamed:owner:options:加载XIB文件

 

看看我写的DEMO

现在假定大家对interface builder 比较熟悉

第一步:

首先我们创建一个single view application

第二步:

在XIB 文件中我们拖进去一个Button ,名字为加载视图,并设置好action 

- (IBAction)loadNewView:(id)sender;

 

第三步:

新建一个空的XIB 文件

 

 

至此,工程结构很简单

 

第四步:

打开我们新建的那个XIB文件 ,我现在想拖进去一个UIView 设置好大小(也可以在加载的时候设置其frame),点击file's owner 设置其所有者为sdsViewController,这个就不用多解释了,用过interface builder的都明白。

sdsViewController这个类关联了两个XIB 文件

 

 

视图如图所示:现在 我们可以在这个新加载的视图里面处理我们的即时需求,那么我们现在就可以通过代码,来加载这一个视图了。

打开- (IBAction)loadNewView:(id)sender; 添加以下几行代码:

 

if (!isLoadingView) {
        
        NSArray *nibViews=[[NSBundle mainBundle] loadNibNamed:@"Empty" owner:self options:nil]; //通过这个方法,取得我们的视图
        subView=[nibViews objectAtIndex:0];
        subView.frame=CGRectMake(0, 0, 320, 160); //设置frame
        [self.view addSubview:subView]; //添加
        
        isLoadingView=true;
        
    } else{
        
        NSLog(@"视图已经加载");
    }

判断句:保证点击按钮的时候,只加载一次,如果不加限制,会不断地进行加载,这个都懂得。

 

 

 

点击加载页面 哈哈,成功加载到我们需要的新视图了。

那我们处理完成即时需求后怎么,回到主场景中去呢,这个很简单,想必大家都会。

为完成按钮,添加点击事件

然后添加代码:

[subView removeFromSuperview]; //从父视图中移除就可以了,
    isLoadingView=false; //视图没有加载,
    NSLog(@"视图已经移除");

 

至此,动态加载视图的DEMO就演示完毕了,总结起来就是一个方法– loadNibNamed:owner:options:加载XIB文件

但其用处可是很广泛的,灵活之处在于大家平时,多多地去琢磨。

优点:灵活,代码量少,程序结构清楚。

 

思考:通过在程序中动态地加载视图,我们可以做很多事情,比如说,我们可以自己实现系统的UIAlertView ,实现自己任何想实现的视图,等等吧。好处就是,实现更多的功能,但我们写代码的量却不是很多。善于利用IOS这几种动态特性,有助于我们的程序更加灵活。有助于我们创造出更加丰富多彩的应用。

关于XIB 与storyBorad更高级的一下用法,请持续关注我的更新,关注我的博文。也希望大家,多多交流,踊跃发言。

 
 
posted @ 2012-12-23 23:43  妙笔  阅读(495)  评论(0编辑  收藏  举报