view的封装
来源:互联网 发布:打电话免费的软件 编辑:程序博客网 时间:2024/05/21 11:12
在ios开发中,如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心,外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据。
例如,假如要开发一个如下左图的效果,我们可以自定义一个如右图所示的小view。
我们要创建一个xib文件,拖入UIView,设置UIView的尺寸,拖入需要的子控件,并创建一个继承UIView的类,将xib的class设置为该类。以下是上面程序的一些相关代码;
#import <UIKit/UIKit.h>@class WDCAppDataModel;@interface WDCappView : UIView@property (nonatomic,strong) WDCAppDataModel *appDataModel;+ (instancetype)appViewWithAppDataModel:(WDCAppDataModel *)appDataModel;@end
// appView.m// 01-我的应用管理//// Created by aaron on 14/11/17.// Copyright (c) 2014年 aaron. All rights reserved.//#import "WDCappView.h"#import "WDCAppDataModel.h"@interface WDCappView ()@property (weak, nonatomic) IBOutlet UIImageView *iconView;@property (weak, nonatomic) IBOutlet UILabel *nameView;@end@implementation WDCappView+ (instancetype)appViewWithAppDataModel:(WDCAppDataModel *)appDataModel{ //读取xib文件(会创建xib中的描述的所有对象,并且按顺序放到数组中返回) NSBundle *bundle = [NSBundle mainBundle]; NSArray *appViews = [bundle loadNibNamed:@"appView" owner:nil options:nil]; WDCappView *appView = [appViews lastObject]; appView.appDataModel = appDataModel; return appView;}//重写set方法- (void)setAppDataModel:(WDCAppDataModel *)appDataModel{ _appDataModel = appDataModel; self.iconView.image = [UIImage imageNamed:appDataModel.icon]; self.nameView.text = appDataModel.name;}@end
在控制器中,我们通过方法
+ (instancetype)appViewWithAppDataModel:(WDCAppDataModel *)appDataModel,将数据模型直接传入view中,实现封装;
</pre><pre name="code" class="objc" style="font-size: 18px; -webkit-text-stroke-color: rgb(0, 0, 0);"></pre></p><pre name="code" class="objc">// 总列数 int totalColums = 3; // app尺寸和间隙 CGFloat appW = 85; CGFloat appH = 90; CGFloat marginX = (self.view.frame.size.width - appW * totalColums) / (totalColums + 1); CGFloat marginY = 15; // 添加appview for (int index = 0; index < self.apps.count; index++) {
<span style="white-space:pre"></span>WDCappView *appView = [WDCappView appViewWithAppDataModel:self.apps[index]]; [self.view addSubview:appView]; // appView的行数以及列数 int row = index / totalColums; int colum = index % totalColums; // 设置Frame CGFloat appX = marginX * (colum + 1) + appW * colum; CGFloat appY = 30 + marginY * row + appH * row; [appView setFrame:CGRectMake(appX, appY, appW, appH)];
使用xib封装一个自定义view的步骤
1>新建一个继承UIView的自定义view,假设类名叫做(WDCAppView)
2>新建一个WDCAppView.xib文件来描述WDCAppView内部的结构
3>修改UIView的类型为WDCAppView真实类型
4>将内部的子控件跟WDCAppView进行属性连线
5> WDCAppView提供一个模型属性
6>重写模型属性的set方法,因为在set方法中可以拿到外界传递的模型数据
7>把模型数据拆开,分别设置数据到对应的子控件中
8>提供一个创建WDCAppView的类方法,将读取xib文件的代码屏蔽起来
需要代码的可以在评论里留下邮箱。
0 0
- view的封装
- view group adapter的封装
- 封装的弹出视图的View
- IOS xib封装自定义view 的封装步骤
- 使用xib封装一个view的步骤
- ios 照片编辑的view封装
- 8.ios之view的封装
- 自定义View的封装(代码方式)
- 使用xib封装一个view的步骤
- 使用xib封装一个view的步骤
- Android之自定义View的封装
- android 自定义View对Title的封装
- 封装可展开和收缩的View
- 纯代码封装自定义View和XIB封装自定义View的区别
- 封装好的测量View的宽和高
- xib文件的使用与封装自定义view的步骤
- 自定义View的封装和xib文件的使用详解
- layout封装成view
- Unity3D学习之树木的创建
- CSS实现盒子与字体发光效果
- 分页
- Android EventBus 通信
- 带headerview的gridview
- view的封装
- sscanf和正则表达式
- hive学习3-DDL语句
- oracle 物化视图学习
- 测试
- Velocity模板
- Codeforces Round #277.5 (Div. 2) 解题报告(A B C D)
- github 常用命令
- 百度地图三种基本样式