动态加载XIB 高级应用
2012-09-20 12:45
155 查看
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 高级应用
- 框架学习前基础加强 泛型高级,注解,反射(泛型&注解)应用案例,IOC,Servlet3.0,动态代理,类加载器
- 动态加载 高级应用之StoryBorad
- 动态加载 高级应用之StoryBorad
- 动态加载 高级应用之StoryBorad
- 滚屏加载--无刷新动态加载数据技术的应用
- Android应用ViewPager和TabLayout动态加载Fragment,并实现view和tab动态刷新。
- Android应用安全之外部动态加载DEX文件风险
- Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源
- swiper在进行动态数据加载时的应用和处理
- 使用jQuery制作高级炫酷吊炸天表单,页面加载完成文本框获得焦点,文本框设置默认文本,文本字数动态显示.....
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
- 实现应用管理 (MVC ,xib,懒加载)
- Android 应用背景加载系统动态壁纸
- jquery 插件ztree的应用------动态加载树节点数据
- Java反射的高级应用,模拟开发环境IDE动态搜索类成员以及方法,。。。。。
- C# 高级应用--反射动态调用类的成员范例 !
- SpringBoot+ZooKeeper+ZKUI+Drools 实现应用配置中心及业务规则动态加载
- 动态加载!dom应用!