博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义View步骤学习笔记
阅读量:4635 次
发布时间:2019-06-09

本文共 2510 字,大约阅读时间需要 8 分钟。

 

用途 : 一个View内部的子控件比较多的时候可以自定义一个View,把它内部的子控件屏蔽起来(就像苹果的导航栏上面的UIBarButton,你是通过BarButtonitem来修改显示的内容)

1.重写 initWithFrame 和 awakeFromNib(一般两个都要写),然后在写一个初始化的方法,在初始化方法中添加子控件和初始化子控件(当然也可以使用懒加载的方式来初始化子控件)

2.在layoutSubviews方法中调整子控件的位置和尺寸

3.提供一个模型属性,让外界来设置显示的内容

 

效果图: 

(当然这种效果也可以通过自定义Button来实现)

代码实现懒加载的方式(使用懒加载的好处是可以单独方法中设置子控件的属性,这样业务更加清晰)

文件有 : KFShopView和 KFShop

/*************** KFShop.h文件 ***************/

@interface KFShop : NSObject

@property (copy, nonatomic) NSString * name;

@property (copy, nonatomic) NSString * icon;

// 提供一个方法用于字典转模型

// 开发中我们要面对模型开发,而不是面对字典开发.例如 属性名如果写错了,编译器马上报错.如果是使用字典,写错了编译器并不会报错

- (instancetype)initWithDict:(NSDictionary *)dict;

+ (instancetype)shopWithDict:(NSDictionary *)dict;

 

@implementation KFShop

- (instancetype)initWithDict:(NSDictionary *)dict

{

    if(self = [super init])

    {

        self.name = dict[@"name"];

        self.icon = dict[@"icon"];

    }

    return self;

}

+ (instancetype)shopWithDict:(NSDictionary *)dict;

{

    return [[self alloc] initWithDict:dict];

}

@end

/*************** KFShopView文件 ***************/

#import <UIKit/UIKit.h>

@class KFShop;

@interface KFShopView : UIView 

@property (strong, nonatomic) KFShop *shop;

+ (instancetype)shopView;

@end

 

@interface KFShopView()

 

@property (weak, nonatomic) UIImageView * imageView;

 

@property (weak, nonatomic) UILabel * nameLabel;

@end
 

 @implementation KFShopView

// 提供一个类方法用来快速创建shopView
+ (instancetype)shopView{        KFShopView *shopView = [[self alloc] init];            return shopView;}// 用到时才会创建imageView- (UIImageView *)imageView{        if(_imageView == nil){                UIImageView * imageVeiw = [[UIImageView alloc] init];        _imageView = imageVeiw;        [self addSubview:_imageView];    }        return _imageView;}// 用到时才会创建nameLabel- (UILabel *)nameLabel{    if(_nameLabel == nil)    {        UILabel * label = [[UILabel alloc] init];        _nameLabel = label;        label.font = [UIFont systemFontOfSize:14];        label.textAlignment = NSTextAlignmentCenter;        [self addSubview:_nameLabel];    }        return _nameLabel;}// 根据传进来的模型设置显示的内容- (void)setShop:(KFShop *)shop{    _shop = shop;        self.imageView.image = [UIImage imageNamed:self.shop.icon];    self.nameLabel.text = shop.name;}// 布局子控件- (void)layoutSubviews{    // 一定要调用super的方法    [super layoutSubviews];        CGFloat W = self.frame.size.width;    CGFloat H = self.frame.size.height;        self.imageView.frame = CGRectMake(0, 0, W, W);    self.nameLabel.frame = CGRectMake(0, W, W, H - W);}

 

转载于:https://www.cnblogs.com/TangKaiFu/p/4620049.html

你可能感兴趣的文章
引入css的四种方式
查看>>
Mysql蠕虫复制
查看>>
centos7+ansible自动化工具使用
查看>>
iOS开发UI篇—transframe属性(形变)
查看>>
3月7日 ArrayList集合
查看>>
正则替换
查看>>
jsp 环境配置记录
查看>>
本地视频播放黑屏,有声音
查看>>
Python3-Cookbook总结 - 第一章:数据结构和算法
查看>>
Python03
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Android初学第36天
查看>>
Some configure
查看>>
.net core 中的[FromBody]
查看>>
json_encode时中文编码转正常状态
查看>>
流量调整和限流技术 【转载】
查看>>
Axure 全局辅助线(转)
查看>>
正由另一进程使用,因此该进程无法访问此文件。
查看>>
1 线性空间
查看>>