RQCommonCell.m 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. //
  2. // RQCommonCell.m
  3. // RQCommon
  4. //
  5. // Created by 张嵘 on 2018/11/27.
  6. // Copyright © 2018 张嵘. All rights reserved.
  7. //
  8. #import "RQCommonCell.h"
  9. #import "RQCommonArrowItemViewModel.h"
  10. #import "RQCommonAvatarItemViewModel.h"
  11. #import "RQCommonQRCodeItemViewModel.h"
  12. #import "RQCommonLabelItemViewModel.h"
  13. #import "RQCommonSwitchItemViewModel.h"
  14. @interface RQCommonCell ()
  15. /// viewModel
  16. @property (nonatomic, readwrite, strong) RQCommonItemViewModel *viewModel;
  17. /// 箭头
  18. @property (nonatomic, readwrite, strong) UIImageView *rightArrow;
  19. /// 开光
  20. @property (nonatomic, readwrite, strong) UISwitch *rightSwitch;
  21. /// 标签
  22. @property (nonatomic, readwrite, strong) UILabel *rightLabel;
  23. /// avatar 头像
  24. @property (nonatomic, readwrite, weak) UIImageView *avatarView;
  25. /// QrCode
  26. @property (nonatomic, readwrite, weak) UIImageView *qrCodeView;
  27. /// 三条分割线
  28. @property (nonatomic, readwrite, weak) UIImageView *divider0;
  29. @property (nonatomic, readwrite, weak) UIImageView *divider1;
  30. @property (nonatomic, readwrite, weak) UIImageView *divider2;
  31. /// 中间偏左 view
  32. @property (nonatomic, readwrite, weak) UIImageView *centerLeftView;
  33. /// 中间偏右 view
  34. @property (nonatomic, readwrite, weak) UIImageView *centerRightView;
  35. @end
  36. @implementation RQCommonCell
  37. #pragma mark - 公共方法
  38. + (instancetype)cellWithTableView:(UITableView *)tableView{
  39. return [self cellWithTableView:tableView style:UITableViewCellStyleValue1];
  40. }
  41. + (instancetype)cellWithTableView:(UITableView *)tableView style:(UITableViewCellStyle)style{
  42. static NSString *ID = @"CommonCell";
  43. RQCommonCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
  44. if (!cell) {
  45. cell = [[self alloc] initWithStyle:style reuseIdentifier:ID];
  46. }
  47. return cell;
  48. }
  49. - (void)setIndexPath:(NSIndexPath *)indexPath rowsInSection:(NSInteger)rows{
  50. self.divider0.hidden = NO;
  51. self.divider1.hidden = NO;
  52. self.divider2.hidden = NO;
  53. if (rows == 1) { /// 一段
  54. self.divider1.hidden = YES;
  55. }else if(indexPath.row == 0) { /// 首行
  56. self.divider2.hidden = YES;
  57. }else if(indexPath.row == rows-1) { /// 末行
  58. self.divider1.hidden = YES;
  59. self.divider0.hidden = YES;
  60. }else{ /// 中间行
  61. self.divider1.hidden = NO;
  62. self.divider0.hidden = YES;
  63. self.divider2.hidden = YES;
  64. }
  65. }
  66. - (void)bindViewModel:(RQCommonItemViewModel *)viewModel{
  67. @weakify(self)
  68. self.viewModel = viewModel;
  69. self.avatarView.hidden = YES;
  70. self.qrCodeView.hidden = YES;
  71. self.selectionStyle = viewModel.selectionStyle;
  72. self.textLabel.text = viewModel.title;
  73. self.imageView.image = (RQStringIsNotEmpty(viewModel.icon))?RQImageNamed(viewModel.icon):nil;
  74. self.detailTextLabel.text = viewModel.subtitle;
  75. /// 设置全新
  76. if (RQStringIsNotEmpty(viewModel.centerLeftViewName)) {
  77. self.centerLeftView.hidden = NO;
  78. self.centerLeftView.image = RQImageNamed(viewModel.centerLeftViewName);
  79. self.centerLeftView.rq_size = self.centerLeftView.image.size;
  80. }else{
  81. self.centerLeftView.hidden = YES;;
  82. }
  83. /// 设置锁
  84. if (RQStringIsNotEmpty(viewModel.centerRightViewName)) {
  85. self.centerRightView.hidden = NO;
  86. self.centerRightView.image = RQImageNamed(viewModel.centerRightViewName);
  87. self.centerRightView.rq_size = self.centerRightView.image.size;
  88. }else{
  89. self.centerRightView.hidden = YES;;
  90. }
  91. if ([viewModel isKindOfClass:[RQCommonArrowItemViewModel class]]) { /// 纯带箭头
  92. self.accessoryView = self.rightArrow;
  93. if ([viewModel isKindOfClass:[RQCommonAvatarItemViewModel class]]) { // 头像
  94. RQCommonAvatarItemViewModel *avatarViewModel = (RQCommonAvatarItemViewModel *)viewModel;
  95. self.avatarView.hidden = NO;
  96. [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) {
  97. @strongify(self)
  98. self.avatarView.layer.cornerRadius = self.avatarView.width / 2.f;
  99. self.avatarView.clipsToBounds = YES;
  100. }];
  101. }else if ([viewModel isKindOfClass:[RQCommonQRCodeItemViewModel class]]){ // 二维码
  102. self.qrCodeView.hidden = NO;
  103. }
  104. }else if([viewModel isKindOfClass:[RQCommonSwitchItemViewModel class]]){ /// 开关
  105. // 右边显示开关
  106. RQCommonSwitchItemViewModel *switchViewModel = (RQCommonSwitchItemViewModel *)viewModel;
  107. self.accessoryView = self.rightSwitch;
  108. self.rightSwitch.on = !switchViewModel.off;
  109. }else{
  110. self.accessoryView = nil;
  111. }
  112. }
  113. #pragma mark - 私有方法
  114. - (void)awakeFromNib {
  115. [super awakeFromNib];
  116. }
  117. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  118. [super setSelected:selected animated:animated];
  119. }
  120. - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
  121. {
  122. if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]){
  123. // 初始化
  124. [self _setup];
  125. // 创建自控制器
  126. [self _setupSubViews];
  127. // 布局子控件
  128. [self _makeSubViewsConstraints];
  129. }
  130. return self;
  131. }
  132. #pragma mark - 初始化
  133. - (void)_setup{
  134. self.contentView.backgroundColor = [UIColor whiteColor];
  135. self.textLabel.textColor = RQ_MAIN_TEXT_COLOR_1;
  136. self.textLabel.font = RQRegularFont_17;
  137. self.detailTextLabel.textColor = RQ_MAIN_COLOR;
  138. self.detailTextLabel.numberOfLines = 0;
  139. self.detailTextLabel.font = RQRegularFont_15;
  140. }
  141. #pragma mark - 创建自控制器
  142. - (void)_setupSubViews{
  143. /// CoderMikeHe Fixed : 这里需要把divider添加到self,而不是self.contentView ,由于添加了 accessView,导致self.contentView的宽度<self的宽度
  144. // 分割线
  145. UIImageView *divider0 = [[UIImageView alloc] init];
  146. self.divider0 = divider0;
  147. [self addSubview:divider0];
  148. UIImageView *divider1 = [[UIImageView alloc] init];
  149. self.divider1 = divider1;
  150. [self addSubview:divider1];
  151. UIImageView *divider2 = [[UIImageView alloc] init];
  152. self.divider2 = divider2;
  153. [self addSubview:divider2];
  154. divider0.backgroundColor = divider1.backgroundColor = divider2.backgroundColor = RQ_MAIN_LINE_COLOR_1;
  155. /// 添加用户头像
  156. UIImageView *avatarView = [[UIImageView alloc] init];
  157. self.avatarView = avatarView;
  158. avatarView.hidden = YES;
  159. [self.contentView addSubview:avatarView];
  160. /// 设置圆角+线宽
  161. // [avatarView zy_attachBorderWidth:1.0f color:RQColorFromHexString(@"#BFBFBF")];
  162. // [avatarView zy_cornerRadiusAdvance:6.0f rectCornerType:UIRectCornerAllCorners];
  163. /// 二维码照片
  164. UIImageView *qrCodeView = [[UIImageView alloc] initWithImage:RQImageNamed(@"setting_myQR_18x18")];
  165. qrCodeView.hidden = YES;
  166. self.qrCodeView = qrCodeView;
  167. [self.contentView addSubview:qrCodeView];
  168. /// 中间偏左的图片
  169. UIImageView *centerLeftView = [[UIImageView alloc] init];
  170. centerLeftView.hidden = YES;
  171. self.centerLeftView = centerLeftView;
  172. [self.contentView addSubview:centerLeftView];
  173. /// 中间偏左的图片
  174. UIImageView *centerRightView = [[UIImageView alloc] init];
  175. centerRightView.hidden = YES;
  176. self.centerRightView = centerRightView;
  177. [self.contentView addSubview:centerRightView];
  178. }
  179. #pragma mark - 布局子控件
  180. - (void)_makeSubViewsConstraints{
  181. }
  182. #pragma mark - 布局
  183. - (void)layoutSubviews{
  184. [super layoutSubviews];
  185. /// 设置
  186. if ((fabs(self.textLabel.rq_x - self.detailTextLabel.rq_x) <=.1f)) {
  187. /// SubTitle
  188. self.textLabel.rq_bottom = self.detailTextLabel.rq_top;
  189. }else{
  190. self.textLabel.rq_centerY = self.rq_height * .5f;
  191. }
  192. self.divider0.frame = CGRectMake(16, 0, self.rq_width -16 - 16, RQGlobalBottomLineHeight);
  193. self.divider1.frame = CGRectMake(16, self.rq_height - RQGlobalBottomLineHeight, self.rq_width -16 - 16, RQGlobalBottomLineHeight);
  194. self.divider2.frame = CGRectMake(16, self.rq_height - RQGlobalBottomLineHeight, self.rq_width-16 - 16, RQGlobalBottomLineHeight);
  195. /// 设置头像
  196. self.avatarView.rq_size = CGSizeMake(34, 34);
  197. self.avatarView.rq_right = self.accessoryView.rq_left - 16;
  198. self.avatarView.rq_centerY = self.rq_height * .5f;
  199. /// 设置二维码
  200. self.qrCodeView.rq_right = self.accessoryView.rq_left - 11;
  201. self.qrCodeView.rq_centerY = self.rq_height * .5f;
  202. /// 配置Artboard
  203. self.centerLeftView.rq_left = self.textLabel.rq_right + 14;
  204. self.centerLeftView.rq_centerY = self.rq_height * .5f;
  205. /// 配置
  206. self.centerRightView.rq_right = self.detailTextLabel.rq_left - 5;
  207. self.centerRightView.rq_centerY = self.rq_height * .5f;
  208. }
  209. #pragma mark - 事件处理
  210. - (void)_switchValueDidiChanged:(UISwitch *)sender{
  211. RQCommonSwitchItemViewModel *switchViewModel = (RQCommonSwitchItemViewModel *)self.viewModel;
  212. switchViewModel.off = !sender.isOn;
  213. }
  214. #pragma mark - Setter Or Getter
  215. - (UIImageView *)rightArrow{
  216. if (_rightArrow == nil) {
  217. _rightArrow = [[UIImageView alloc] initWithImage:RQImageNamed(@"更多")];
  218. }
  219. return _rightArrow;
  220. }
  221. - (UISwitch *)rightSwitch{
  222. if (_rightSwitch == nil) {
  223. _rightSwitch = [[UISwitch alloc] init];
  224. [_rightSwitch addTarget:self action:@selector(_switchValueDidiChanged:) forControlEvents:UIControlEventValueChanged];
  225. }
  226. return _rightSwitch;
  227. }
  228. @end