123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- //
- // RQCommonCell.m
- // RQCommon
- //
- // Created by 张嵘 on 2018/11/27.
- // Copyright © 2018 张嵘. All rights reserved.
- //
- #import "RQCommonCell.h"
- #import "RQCommonArrowItemViewModel.h"
- #import "RQCommonAvatarItemViewModel.h"
- #import "RQCommonQRCodeItemViewModel.h"
- #import "RQCommonLabelItemViewModel.h"
- #import "RQCommonSwitchItemViewModel.h"
- @interface RQCommonCell ()
- /// viewModel
- @property (nonatomic, readwrite, strong) RQCommonItemViewModel *viewModel;
- /// 箭头
- @property (nonatomic, readwrite, strong) UIImageView *rightArrow;
- /// 开光
- @property (nonatomic, readwrite, strong) UISwitch *rightSwitch;
- /// 标签
- @property (nonatomic, readwrite, strong) UILabel *rightLabel;
- /// avatar 头像
- @property (nonatomic, readwrite, weak) UIImageView *avatarView;
- /// QrCode
- @property (nonatomic, readwrite, weak) UIImageView *qrCodeView;
- /// 三条分割线
- @property (nonatomic, readwrite, weak) UIImageView *divider0;
- @property (nonatomic, readwrite, weak) UIImageView *divider1;
- @property (nonatomic, readwrite, weak) UIImageView *divider2;
- /// 中间偏左 view
- @property (nonatomic, readwrite, weak) UIImageView *centerLeftView;
- /// 中间偏右 view
- @property (nonatomic, readwrite, weak) UIImageView *centerRightView;
- @end
- @implementation RQCommonCell
- #pragma mark - 公共方法
- + (instancetype)cellWithTableView:(UITableView *)tableView{
- return [self cellWithTableView:tableView style:UITableViewCellStyleValue1];
- }
- + (instancetype)cellWithTableView:(UITableView *)tableView style:(UITableViewCellStyle)style{
- static NSString *ID = @"CommonCell";
- RQCommonCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
- if (!cell) {
- cell = [[self alloc] initWithStyle:style reuseIdentifier:ID];
- }
- return cell;
- }
- - (void)setIndexPath:(NSIndexPath *)indexPath rowsInSection:(NSInteger)rows{
- self.divider0.hidden = NO;
- self.divider1.hidden = NO;
- self.divider2.hidden = NO;
- if (rows == 1) { /// 一段
- self.divider1.hidden = YES;
- }else if(indexPath.row == 0) { /// 首行
- self.divider2.hidden = YES;
- }else if(indexPath.row == rows-1) { /// 末行
- self.divider1.hidden = YES;
- self.divider0.hidden = YES;
- }else{ /// 中间行
- self.divider1.hidden = NO;
- self.divider0.hidden = YES;
- self.divider2.hidden = YES;
- }
- }
- - (void)bindViewModel:(RQCommonItemViewModel *)viewModel{
- @weakify(self)
- self.viewModel = viewModel;
-
- self.avatarView.hidden = YES;
- self.qrCodeView.hidden = YES;
-
- self.selectionStyle = viewModel.selectionStyle;
- self.textLabel.text = viewModel.title;
- self.imageView.image = (RQStringIsNotEmpty(viewModel.icon))?RQImageNamed(viewModel.icon):nil;
- self.detailTextLabel.text = viewModel.subtitle;
- /// 设置全新
- if (RQStringIsNotEmpty(viewModel.centerLeftViewName)) {
- self.centerLeftView.hidden = NO;
- self.centerLeftView.image = RQImageNamed(viewModel.centerLeftViewName);
- self.centerLeftView.rq_size = self.centerLeftView.image.size;
- }else{
- self.centerLeftView.hidden = YES;;
- }
-
- /// 设置锁
- if (RQStringIsNotEmpty(viewModel.centerRightViewName)) {
- self.centerRightView.hidden = NO;
- self.centerRightView.image = RQImageNamed(viewModel.centerRightViewName);
- self.centerRightView.rq_size = self.centerRightView.image.size;
- }else{
- self.centerRightView.hidden = YES;;
- }
-
- if ([viewModel isKindOfClass:[RQCommonArrowItemViewModel class]]) { /// 纯带箭头
- self.accessoryView = self.rightArrow;
- if ([viewModel isKindOfClass:[RQCommonAvatarItemViewModel class]]) { // 头像
- RQCommonAvatarItemViewModel *avatarViewModel = (RQCommonAvatarItemViewModel *)viewModel;
- self.avatarView.hidden = NO;
- [self.avatarView yy_setImageWithURL:[NSURL URLWithString:avatarViewModel.avatar] placeholder:RQWebAvatarImagePlaceholder() options:RQWebImageOptionAutomatic completion:^(UIImage * _Nullable image, NSURL * _Nonnull url, YYWebImageFromType from, YYWebImageStage stage, NSError * _Nullable error) {
- @strongify(self)
- self.avatarView.layer.cornerRadius = self.avatarView.width / 2.f;
- self.avatarView.clipsToBounds = YES;
- }];
- }else if ([viewModel isKindOfClass:[RQCommonQRCodeItemViewModel class]]){ // 二维码
- self.qrCodeView.hidden = NO;
- }
- }else if([viewModel isKindOfClass:[RQCommonSwitchItemViewModel class]]){ /// 开关
- // 右边显示开关
- RQCommonSwitchItemViewModel *switchViewModel = (RQCommonSwitchItemViewModel *)viewModel;
- self.accessoryView = self.rightSwitch;
- self.rightSwitch.on = !switchViewModel.off;
- }else{
- self.accessoryView = nil;
- }
- }
- #pragma mark - 私有方法
- - (void)awakeFromNib {
- [super awakeFromNib];
-
- }
- - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
- [super setSelected:selected animated:animated];
- }
- - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
- {
- if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]){
- // 初始化
- [self _setup];
-
- // 创建自控制器
- [self _setupSubViews];
-
- // 布局子控件
- [self _makeSubViewsConstraints];
- }
- return self;
- }
- #pragma mark - 初始化
- - (void)_setup{
-
- self.contentView.backgroundColor = [UIColor whiteColor];
-
- self.textLabel.textColor = RQ_MAIN_TEXT_COLOR_1;
- self.textLabel.font = RQRegularFont_17;
-
- self.detailTextLabel.textColor = RQ_MAIN_COLOR;
- self.detailTextLabel.numberOfLines = 0;
- self.detailTextLabel.font = RQRegularFont_15;
- }
- #pragma mark - 创建自控制器
- - (void)_setupSubViews{
-
- /// CoderMikeHe Fixed : 这里需要把divider添加到self,而不是self.contentView ,由于添加了 accessView,导致self.contentView的宽度<self的宽度
- // 分割线
- UIImageView *divider0 = [[UIImageView alloc] init];
- self.divider0 = divider0;
- [self addSubview:divider0];
- UIImageView *divider1 = [[UIImageView alloc] init];
- self.divider1 = divider1;
- [self addSubview:divider1];
- UIImageView *divider2 = [[UIImageView alloc] init];
- self.divider2 = divider2;
- [self addSubview:divider2];
- divider0.backgroundColor = divider1.backgroundColor = divider2.backgroundColor = RQ_MAIN_LINE_COLOR_1;
-
- /// 添加用户头像
- UIImageView *avatarView = [[UIImageView alloc] init];
- self.avatarView = avatarView;
- avatarView.hidden = YES;
- [self.contentView addSubview:avatarView];
- /// 设置圆角+线宽
- // [avatarView zy_attachBorderWidth:1.0f color:RQColorFromHexString(@"#BFBFBF")];
- // [avatarView zy_cornerRadiusAdvance:6.0f rectCornerType:UIRectCornerAllCorners];
-
- /// 二维码照片
- UIImageView *qrCodeView = [[UIImageView alloc] initWithImage:RQImageNamed(@"setting_myQR_18x18")];
- qrCodeView.hidden = YES;
- self.qrCodeView = qrCodeView;
- [self.contentView addSubview:qrCodeView];
-
- /// 中间偏左的图片
- UIImageView *centerLeftView = [[UIImageView alloc] init];
- centerLeftView.hidden = YES;
- self.centerLeftView = centerLeftView;
- [self.contentView addSubview:centerLeftView];
-
- /// 中间偏左的图片
- UIImageView *centerRightView = [[UIImageView alloc] init];
- centerRightView.hidden = YES;
- self.centerRightView = centerRightView;
- [self.contentView addSubview:centerRightView];
- }
- #pragma mark - 布局子控件
- - (void)_makeSubViewsConstraints{
-
-
- }
- #pragma mark - 布局
- - (void)layoutSubviews{
- [super layoutSubviews];
- /// 设置
- if ((fabs(self.textLabel.rq_x - self.detailTextLabel.rq_x) <=.1f)) {
- /// SubTitle
- self.textLabel.rq_bottom = self.detailTextLabel.rq_top;
- }else{
- self.textLabel.rq_centerY = self.rq_height * .5f;
- }
-
-
- self.divider0.frame = CGRectMake(16, 0, self.rq_width -16 - 16, RQGlobalBottomLineHeight);
- self.divider1.frame = CGRectMake(16, self.rq_height - RQGlobalBottomLineHeight, self.rq_width -16 - 16, RQGlobalBottomLineHeight);
- self.divider2.frame = CGRectMake(16, self.rq_height - RQGlobalBottomLineHeight, self.rq_width-16 - 16, RQGlobalBottomLineHeight);
-
- /// 设置头像
- self.avatarView.rq_size = CGSizeMake(34, 34);
- self.avatarView.rq_right = self.accessoryView.rq_left - 16;
- self.avatarView.rq_centerY = self.rq_height * .5f;
-
- /// 设置二维码
- self.qrCodeView.rq_right = self.accessoryView.rq_left - 11;
- self.qrCodeView.rq_centerY = self.rq_height * .5f;
-
- /// 配置Artboard
- self.centerLeftView.rq_left = self.textLabel.rq_right + 14;
- self.centerLeftView.rq_centerY = self.rq_height * .5f;
-
- /// 配置
- self.centerRightView.rq_right = self.detailTextLabel.rq_left - 5;
- self.centerRightView.rq_centerY = self.rq_height * .5f;
- }
- #pragma mark - 事件处理
- - (void)_switchValueDidiChanged:(UISwitch *)sender{
- RQCommonSwitchItemViewModel *switchViewModel = (RQCommonSwitchItemViewModel *)self.viewModel;
- switchViewModel.off = !sender.isOn;
- }
- #pragma mark - Setter Or Getter
- - (UIImageView *)rightArrow{
- if (_rightArrow == nil) {
- _rightArrow = [[UIImageView alloc] initWithImage:RQImageNamed(@"更多")];
- }
- return _rightArrow;
- }
- - (UISwitch *)rightSwitch{
- if (_rightSwitch == nil) {
- _rightSwitch = [[UISwitch alloc] init];
- [_rightSwitch addTarget:self action:@selector(_switchValueDidiChanged:) forControlEvents:UIControlEventValueChanged];
- }
- return _rightSwitch;
- }
- @end
|