动态加载XIB 高级应用
2012-12-23 23:43
232 查看
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更高级的一下用法,请持续关注我的更新,关注我的博文。也希望大家,多多交流,踊跃发言。
而我今天与大家分享的就是关于动态加载的一些用法,其他两个想必也是经常用到的,在这也就不多说了。
所谓,动态加载,就是在程序运行当中,根据需要动态地加载一些视图,常常用在,游戏等多视图的应用中,当然如果有需要,可以用在任何场景中。
动态加载用到的一个类就是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更高级的一下用法,请持续关注我的更新,关注我的博文。也希望大家,多多交流,踊跃发言。
相关文章推荐
- 动态加载XIB 高级应用
- 动态加载XIB 高级应用
- 动态加载 高级应用之StoryBorad
- 框架学习前基础加强 泛型高级,注解,反射(泛型&注解)应用案例,IOC,Servlet3.0,动态代理,类加载器
- 动态加载 高级应用之StoryBorad
- 动态加载 高级应用之StoryBorad
- STM32系统中应用的动态加载可行性研究过程之JavaScript语言的学习<二>
- android 应用动态加载机制1
- highcharts 高级应用—动态曲线的实现
- 实体框架高级应用之动态过滤 EntityFramework DynamicFilters
- Android插件化系列第(二)篇---动态加载技术之应用换肤
- MapObjects2.2 在C#中的应用(动态加载地图)
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类 推荐
- 滚屏加载--无刷新动态加载数据技术的应用
- android 应用动态加载机制2--资源加载机制和Activity生命周期管理
- Google的跟踪代码 动态加载js代码方法应用
- IBATIES 高级应用 动态组合条件
- 解析iOS应用的UI开发中懒加载和xib的简单使用方法
- MyBatis学习(六)---高级应用(延迟加载、缓存)
- jquery 插件ztree的应用------动态加载树节点数据