iOS基础开发UI界面-xib与代码自定义控件的区别
来源:互联网 发布:在线抽奖软件 编辑:程序博客网 时间:2024/06/06 02:20
自定义控件的方法有两种,一种是通过纯代码添加,另一种是通过添加xib文件添加.然而两种方法都可以添加,由此可以总结出两种方法的区别和步骤
一.通过代码自定义控件
1>.新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)
2>.在initWithFrame方法中添加子控件(保证别人在外面不管是通过init还是initWithFrame创建都能够添加子控件,因为init方法内部会调用initWithFrame
3>.在layoutSubViews方法中设置子控件的frame(因为在InitWithFrame方法中当前控件尺寸可能没值,所以计算不了子控件的位置和尺寸,而在layoutSubViews方法,能够拿到当前控件的尺寸)
4>.提供一个模型属性,重写模型属性的set方法(保证在别人在设置数据的那一刻就可以拿到数据设置到对应的子控件上)
二.通过xib自定义控件
1>.新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)
2>.新建一个xib文件(xib的文件名最好和类名一样)
3>.修改最外面那个控件的class为控件类名(只有修改类名,当时候从xib中出来的才是我这种类型的控件,这样就可以管理我们创建出来的xib文件)
4>.提供一个模型属性,重写模型属性的set方法(保证在别人在设置数据的那一刻就可以拿到数据设置到对应的子控件上)
通过运行程序我们可以看出,控件通过xib或者storyboard初始化的时候一定会调用initWithCoder方法,二控件如果通过纯代码创建就只会调用initWithFrame方法,所以我们要在初始化时候添加一些属性或者子控件的一些东西,最好是重写这两个方法来获取.需要注意的一点是,通过alloc/init或者alloc/initWithFrame方法来创建控件,不会主动加载xib文件,即使xib文件的文件名和类名一样也是不可以的.
最后分享一个有关于解决图片拉伸之后变得不好看的问题的解决办法,可以添加一个分类来创建一个方法,代码如下:
一.通过代码自定义控件
1>.新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)
2>.在initWithFrame方法中添加子控件(保证别人在外面不管是通过init还是initWithFrame创建都能够添加子控件,因为init方法内部会调用initWithFrame
3>.在layoutSubViews方法中设置子控件的frame(因为在InitWithFrame方法中当前控件尺寸可能没值,所以计算不了子控件的位置和尺寸,而在layoutSubViews方法,能够拿到当前控件的尺寸)
4>.提供一个模型属性,重写模型属性的set方法(保证在别人在设置数据的那一刻就可以拿到数据设置到对应的子控件上)
二.通过xib自定义控件
1>.新建一个继承UIView的类,(所谓自定义控件就是继承系统自带的控件写一个自己的控件)
2>.新建一个xib文件(xib的文件名最好和类名一样)
3>.修改最外面那个控件的class为控件类名(只有修改类名,当时候从xib中出来的才是我这种类型的控件,这样就可以管理我们创建出来的xib文件)
4>.提供一个模型属性,重写模型属性的set方法(保证在别人在设置数据的那一刻就可以拿到数据设置到对应的子控件上)
通过运行程序我们可以看出,控件通过xib或者storyboard初始化的时候一定会调用initWithCoder方法,二控件如果通过纯代码创建就只会调用initWithFrame方法,所以我们要在初始化时候添加一些属性或者子控件的一些东西,最好是重写这两个方法来获取.需要注意的一点是,通过alloc/init或者alloc/initWithFrame方法来创建控件,不会主动加载xib文件,即使xib文件的文件名和类名一样也是不可以的.
最后分享一个有关于解决图片拉伸之后变得不好看的问题的解决办法,可以添加一个分类来创建一个方法,代码如下:
+ (UIImage *)resizingImageWithImageName:(NSString *)imageName{ // 1.创建图片对象 UIImage *image = [UIImage imageNamed:imageName]; // 2.找到可拉伸的区域 CGFloat imageW = image.size.width; CGFloat imageH = image.size.height; // // 3.创建可拉伸的图片// UIImage *resizingImage = [image resizableImageWithCapInsets:UIEdgeInsetsMake(imageH * 0.5, imageW * 0.5, imageH * 0.5 - 1, imageW * 0.5 -1) resizingMode:UIImageResizingModeTile];// // // 4.返回可拉伸的图片// return resizingImage; // 3.创建可拉伸的图片 image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(imageH * 0.5, imageW * 0.5, imageH * 0.5 - 1, imageW * 0.5 -1) resizingMode:UIImageResizingModeTile]; return image;
通过这种方法,可以轻松解决图片被拉伸之后发生的一些改变.只要传入一个图片参数,就返回一个可以拉伸并且拉伸之后不会改变其他细节的图片.
0 0
- iOS基础开发UI界面-xib与代码自定义控件的区别
- iOS开发UI基础—23使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- ioS开发之UI基础--使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- 【IOS 开发学习总结-OC-41】★★ios开发——代码控制 UI 界面与 UI 控件的自定义
- iOS基础开发UI界面-xib基本使用
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- iOS开发UI篇—使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- ios开发UI基础—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- iOS开发UI基础—24使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- iOS开发之UI基础--纯代码自定义UItableviewcell实现一个简单的微博界面布局
- iOS 【UIKit-代码/xib 自定义控件】
- UI界面:手写UI代码或者使用xib和StoryBoard制作UI界面的区别和分析
- iOS开发UI篇 -- 0401团购案例-使用xib自定义控件
- iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法
- iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法
- Xib界面上的控件与代码的相互关联方法
- 区间动规 回文词
- UIApplicationDelegate-UI进阶
- android开发笔记之多媒体—撕衣服(开心一下)
- hdu 2955 Robberies
- 4. Median of Two Sorted Arrays
- iOS基础开发UI界面-xib与代码自定义控件的区别
- jQuery源码分析--event事件绑定(下)
- BestCoder Round #83 1001 zxa and set
- POJ 2229 Sumsets
- uva10651 Pebble Solitaire(记忆化搜索)
- iOS应用程序的启动原理-UI进阶
- 第七周项目一-成员函数、友元函数和一般函数有区别
- tomcat JVM 性能优化
- 【3325】顺序表应用2:多余元素删除之建表算法