方法一:按钮的superView父控件中,添加一个字典属性,用于储存模型数据,在需要时拿来用
- 该字典的的key可以用btn.description
- 该字典可以使用泛型
, ZGKMeSquareModel>
#import "ZGKMeFooterView.h"
#import "AFNetworking.h"
#import "MJExtension.h"
#import "ZGKMeSquareModel.h"
#import "UIImageView+WebCache.h"
#import "UIButton+WebCache.h"
#import "ZGKMeFooterviewButton.h"
@interface ZGKMeFooterView()
/** 储存模型数据的字典----泛型 */
@property (strong, nonatomic) NSMutableDictionary *allSquares;
@end
@implementation ZGKMeFooterView
/**** 懒加载 ****/
- (NSMutableDictionary *)allSquares{
if (!_allSquares) {
_allSquares = [NSMutableDictionary dictionary];
}
return _allSquares;
}
/**** 根据模型数据创建对应的控件 ****/
- (void)creatSquaresBtn: (NSArray *)squares{
//
// // 1.方块个数
// NSUInteger count = squares.count;
//
// // 2.方块参数
// int maxColsCount = 4;
// CGFloat maxWidth = self.zgk_width / 4;
// CGFloat maxHeight = maxWidth;
//
// // 3.创建按钮并设置模型数据
// // 为了美观,添加3个空白按钮
// for (int index = 0; index < count; index ++) {
// ZGKMeFooterviewButton *btn = [ZGKMeFooterviewButton buttonWithType:UIButtonTypeCustom];
// [self addSubview:btn];
//
// // 设置btn的frame
// btn.zgk_x = (index % maxColsCount) * maxWidth;
// btn.zgk_y = (index / maxColsCount) * maxHeight;
// btn.zgk_width = maxWidth;
// btn.zgk_height = maxHeight;
// // 设置按钮颜色
// btn.backgroundColor = [UIColor whiteColor];
//
// // 4.拿到模型数据,并赋值()
// // 判断:如果超过了count个btn,则模型为nil
// ZGKMeSquareModel *square = index >= 33 ? nil : squares[index];
//
// [btn setTitle:square.name forState:UIControlStateNormal];
//
// // 这个方法是btn特有的,这里直接使btn,而不是btn.image来设置图片,因为按钮在设置图片时才要指定状态
// // 需#import "UIButton+WebCache.h"
// [btn sd_setImageWithURL:[NSURL URLWithString:square.icon] forState:UIControlStateNormal];
//
// // 5.监听按钮的点击
// [btn addTarget:self action:@selector(squareBtnClick:) forControlEvents:UIControlEventTouchUpInside];
//
// // 6.根据返回的数据,重新设置footerview的高度,高度=最后一个按钮的bottom的最大y值
// self.zgk_height = self.subviews.lastObject.zgk_bottom;
// [self.tableview reloadData];
// 7.将模型数据用字典储存,以备以后使用
// 注意:字典的key是遵守NSCoping协议的,所以一般是NSString,控件的话,可以用控件的description属性
self.allSquares[btn.description] = squares[index];
}
}
/**** 超过父控件部分,点击是无法响应的,要么改变父控件的大小,要么重写hitTest方法 ****/
- (void)squareBtnClick:(ZGKMeFooterviewButton *)button{
ZGKLog(@"url -- %@", self.allSquares[button.description].url);
}
方法二:在自定义button中添加模型属性,由button自己完成模型数据的设置
// .h文件
#import
@class ZGKMeSquareModel;
@interface ZGKMeFooterviewButton : UIButton
/** 模型属性 */
@property (strong, nonatomic) ZGKMeSquareModel *square;
@end
// .m文件,重写set方法
- (void)setSquare:(ZGKMeSquareModel *)square{
_square = square;
[self setTitle:square.name forState:UIControlStateNormal];
// 这个方法是btn特有的,这里直接使btn,而不是btn.image来设置图片,因为按钮在设置图片时才要指定状态
// 需#import "UIButton+WebCache.h"
[self sd_setImageWithURL:[NSURL URLWithString:square.icon] forState:UIControlStateNormal];
}
// button的父控件,footerview
/**** 根据模型数据创建对应的控件 ****/
- (void)creatSquaresBtn: (NSArray *)squares{
// // 1.方块个数
// NSUInteger count = squares.count;
//
// // 2.方块参数
// int maxColsCount = 4;
// CGFloat maxWidth = self.zgk_width / 4;
// CGFloat maxHeight = maxWidth;
//
// // 3.创建按钮并设置模型数据
// // 为了美观,添加3个空白按钮
// for (int index = 0; index < count; index ++) {
// ZGKMeFooterviewButton *btn = [ZGKMeFooterviewButton buttonWithType:UIButtonTypeCustom];
// [self addSubview:btn];
//
// // 设置btn的frame
// btn.zgk_x = (index % maxColsCount) * maxWidth;
// btn.zgk_y = (index / maxColsCount) * maxHeight;
// btn.zgk_width = maxWidth;
// btn.zgk_height = maxHeight;
// // 设置按钮颜色
// btn.backgroundColor = [UIColor whiteColor];
//
// // 4.拿到模型数据,并赋值()
// // 判断:如果超过了count个btn,则模型为nil
// ZGKMeSquareModel *square = index >= 33 ? nil : squares[index];
btn.square = square;
// // 5.监听按钮的点击
// [btn addTarget:self action:@selector(squareBtnClick:) forControlEvents:UIControlEventTouchUpInside];
//
// // 6.根据返回的数据,重新设置footerview的高度,高度=最后一个按钮的bottom的最大y值
// self.zgk_height = self.subviews.lastObject.zgk_bottom;
// [self.tableview reloadData];
// 7.将模型数据用字典储存,以备以后使用
// 注意:字典的key是遵守NSCoping协议的,所以一般是NSString,控件的话,可以用控件的description属性
// self.allSquares[btn.description] = squares[index];
}
}
/**** 超过父控件部分,点击是无法响应的,要么改变父控件的大小,要么重写hitTest方法 ****/
- (void)squareBtnClick:(ZGKMeFooterviewButton *)button{
ZGKLog(@"url -- %@", button.square.url);
}