iOS基础开发UI界面-xib基本使用
来源:互联网 发布:c语言中有哪些数据类型 编辑:程序博客网 时间:2024/05/16 09:01
XIB
在开发中,自定义View不一定要纯代码,还有另外的方式,就是创建xib.storyboard是从xib演化而来的,storyboard是描述整个软件界面,比较重量级,xib相对而言,是描述局部,比较轻量级.
A.加载xib的两种方式:
1.直接返回一个数组
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"test" owner:nil options:nil];
2.返回一个nib对象,然后用nib的instantiteWithOwer方法,返回第一个数组
B.设置xib数据
设置xib数据的方法有很多,每种方法都可以设置到对应控件的值.只不过方法的区别在于哪一种方法更好用.
1.第一种方法:遍历所有的xib中所有的子控件
// 直接遍历子控件设置数据
2.第二种方法:绑定子控件的tag值
// 通过tag拿到对应的子控件设置数据
3.第三种方法:自定义view封装管理xib
通过这方法可以更好的将内部实现的细节屏蔽,符合面向对象的三大特性.
a.先创建一个XXXShopView,xib和其文件名保持一致
b.把xib文件的类从UIView改成XXXShopView
c.拖线内部的子控件设置数据
d.重写模型的set方法
设置数据的三种思路:
1.在头文件中直接暴露子控件
2.提供方便的接口方便外界传数据
3.提供模型属性
d.提供内方法封装xib的加载过程
C.xib注意点
如果通过xib或者storyboard创建的控件,初始化时时不会滴啊用initWithFrame,会调用initCoder,并且在初始化完毕之后会滴啊用awakeFromNib方法.如果要舒适化数据,一般选择重写awakeFromNib方法.
D.xib的加载原理
一般来说,xib是一层一层的解释转为对应的代码,如下:
}
XIB控件是什么类型,加载出来就是什么类型,xib中的子控件是什么类型,拖线出来就是什么类型.需要注意的一点是,通过alloc/init或者alloc/initWihtFrmae创建控件不会主动加载xib,及时xib的名称和控件的类型一样.
在开发中,自定义View不一定要纯代码,还有另外的方式,就是创建xib.storyboard是从xib演化而来的,storyboard是描述整个软件界面,比较重量级,xib相对而言,是描述局部,比较轻量级.
A.加载xib的两种方式:
1.直接返回一个数组
NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"test" owner:nil options:nil];
2.返回一个nib对象,然后用nib的instantiteWithOwer方法,返回第一个数组
UINib *nib = [UINib nibWithNibName:@"Test" bundle:nil];//如果bundel作为参数, nil 默认是mainBundle NSArray *array = [nib instantiteWithOwer:nil object:nil];
B.设置xib数据
设置xib数据的方法有很多,每种方法都可以设置到对应控件的值.只不过方法的区别在于哪一种方法更好用.
1.第一种方法:遍历所有的xib中所有的子控件
// 直接遍历子控件设置数据
for (UIView *view in shopView.subviews) { if ([view isKindOfClass:[UIImageView class]]) { UIImageView *imageView = (UIImageView *)view; imageView.image = [UIImage imageNamed:shop.icon]; } else if ([view isKindOfClass:[UILabel class]]) { UILabel *label = (UILabel *)view; label.text = shop.name; } }
2.第二种方法:绑定子控件的tag值
// 通过tag拿到对应的子控件设置数据
UIImageView *iconImageView = (UIImageView *)[shopView viewWithTag:1]; iconImageView.image = [UIImage imageNamed:shop.icon]; UILabel *nameLabel = (UILabel *)[shopView viewWithTag:2]; nameLabel.text = shop.name;
3.第三种方法:自定义view封装管理xib
通过这方法可以更好的将内部实现的细节屏蔽,符合面向对象的三大特性.
a.先创建一个XXXShopView,xib和其文件名保持一致
b.把xib文件的类从UIView改成XXXShopView
c.拖线内部的子控件设置数据
d.重写模型的set方法
设置数据的三种思路:
1.在头文件中直接暴露子控件
2.提供方便的接口方便外界传数据
3.提供模型属性
d.提供内方法封装xib的加载过程
+ (instancetype)shopView{ return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];}+ (instancetype)shopViewWithShop:(XXXShop *)shop{ XXXShopView *shopView = [self shopView]; shopView.shop = shop; return shopView;}
C.xib注意点
如果通过xib或者storyboard创建的控件,初始化时时不会滴啊用initWithFrame,会调用initCoder,并且在初始化完毕之后会滴啊用awakeFromNib方法.如果要舒适化数据,一般选择重写awakeFromNib方法.
D.xib的加载原理
一般来说,xib是一层一层的解释转为对应的代码,如下:
- (void)loadXib{ XXXShopView *shopView = [[XXXShopView alloc] initWithCoder:nil]; shopView.frame = CGRectMake(0, 0, 70, 90); shopView.backgroundColor = [UIColor whiteColor]; UIImageView *iconImageView = [[UIImageView alloc] initWithCoder:nil]; iconImageView.backgroundColor = [UIColor greenColor]; iconImageView.frame = CGRectMake(0, 0, 70, 70); [shopView addSubview:iconImageView]; self.iconImageView = iconImageView; XXXLabel *nameLabel = [[XXXLabel alloc] initWithCoder:nil]; nameLabel.backgroundColor = [UIColor greenColor]; nameLabel.frame = CGRectMake(0, 0, 70, 70); [shopView addSubview:nameLabel]; self.nameLabel = nameLabel;
}
XIB控件是什么类型,加载出来就是什么类型,xib中的子控件是什么类型,拖线出来就是什么类型.需要注意的一点是,通过alloc/init或者alloc/initWihtFrmae创建控件不会主动加载xib,及时xib的名称和控件的类型一样.
0 0
- iOS基础开发UI界面-xib基本使用
- iOS开发UI基础—23使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- ioS开发之UI基础--使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- iOS基础开发UI界面-xib与代码自定义控件的区别
- 使用xib开发界面
- 使用xib开发界面
- 使用xib开发界面
- iOS开发UI基础—08应用程序管理之xib的简单使用
- iOS开发UI基础—19UITableview控件基本使用
- ioS开发之UI基础--UIScrollView的基本使用
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- IOS开发基础—通过联系人管理实例学习xib的基本使用
- iOS开发UI篇—xib的简单使用
- iOS开发UI篇—xib的简单使用
- iOS开发UI篇—xib的简单使用
- sdutoj 3363 数据结构实验之图论七:驴友计划 (暴力深搜最短路)
- 使用 根据语言环境不同 而显示不同的 资源本地化 ASP.NET 网页
- 证监会助范爷成最牛空头,套现10亿做空千亿市场!
- LeapMotion SDK 开发之一 编写第一个LeapMotion VC++ 程序
- Android开发实践:如何设置NDK的编译选项
- iOS基础开发UI界面-xib基本使用
- Git命令进行GitHub的交互
- centos系统下浏览器能打开网页但命令行无法ping通外网的解决办法
- MySQL常见问题总结分析
- JAVA中Final的用法
- PHP MVC框架路由学习笔记
- proftp 使用FTPS配置
- 学习一个新领域的知识的最佳方法和最快时间各是什么?
- PHP MVC框架 视图之常用学习笔记