自定义View的两种方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义View的两种方式相关的知识,希望对你有一定的参考价值。

(一)xib自定义view

1.思路

1)首先创建AppView类是,勾选上xib,就会创建出AppView.h,AppView.m,AppView.xib三个文件

2)先在AppView.xib文件上拖拽相应的控件,并进行适配

3)同样在AppView.h文件中,提供一个类方法创建AppView对象,并添加一个数据模型属性,用于向AppView传递模型

4)在AppView.m文件中,实现类方法,并在数据模型的set方法中实现对成员view内容的设置更新,将需要用到的空间属性通过拖线到.m文件中

2.关键代码

技术分享
 1 #import <UIKit/UIKit.h>
 2 
 3 @class MJApp;
 4 
 5 @interface MJAppView : UIView
 6 
 7 /**
 8  *  模型数据
 9  */
10 @property (nonatomic, strong) MJApp *app;
11 
12 + (instancetype)appView;
13 
14 /**
15  *  通过模型数据来创建一个view
16  */
17 + (instancetype)appViewWithApp:(MJApp *)app;
18 
19 @end
AppView.h
技术分享
 1 #import "MJAppView.h"
 2 #import "MJApp.h"
 3 
 4 @interface MJAppView()
 5 @property (weak, nonatomic) IBOutlet UIImageView *iconView;
 6 @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
 7 @end
 8 
 9 @implementation MJAppView
10 //先从xib中读取出相应布局,在调用模型的set方法,设置
11 + (instancetype)appViewWithApp:(MJApp *)app
12 {
13     NSBundle *bundle = [NSBundle mainBundle];
14     // 读取xib文件(会创建xib中的描述的所有对象,并且按顺序放到数组中返回)
15     NSArray *objs = [bundle loadNibNamed:@"MJAppView" owner:nil options:nil];
16     MJAppView *appView = [objs lastObject];
17     appView.app = app;
18     return appView;
19 }
20 
21 + (instancetype)appView
22 {
23     return [self appViewWithApp:nil];
24 }
25 
26 - (void)setApp:(MJApp *)app
27 {
28     _app = app;
29     
30     // 1.设置图标
31     self.iconView.image = [UIImage imageNamed:app.icon];
32     
33     // 2.设置名称
34     self.nameLabel.text = app.name;
35 }
36 
37 @end
appView.m

在UIViewController中,直接利用appView的类方法即可创建

        MJAppView *appView = [MJAppView appViewWithApp:self.apps[index]];

(二)纯代码实现自定义view

1.思路

1)同样可以在view.m方法中重写initWithFrame:(CGrect)frame这个方法,在这个方法中主要是对一些新的内容控件的添加

2)在数据模型属性的set方法中对内容控件进行设置,以及空间的frame设置

3)在- (void)willMoveToSuperView:(UIView *)newSuperview,这个方法中实现自身frame的设置

2.关键代码

 

以上是关于自定义View的两种方式的主要内容,如果未能解决你的问题,请参考以下文章

Android图片添加阴影效果的两种方式

Android开发中,自定义注解的两种应用方式

ExtJS 3:创建自定义类的两种方式:有啥区别?

0139 函数的两种声明方式

React 自定义组件的两种方式

IIS下自定义错误页面配置的两种方式(亲测可行)--IIS服务器