RQCommonCell.m 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  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. self.viewModel = viewModel;
  68. self.avatarView.hidden = YES;
  69. self.qrCodeView.hidden = YES;
  70. self.selectionStyle = viewModel.selectionStyle;
  71. self.textLabel.text = viewModel.title;
  72. self.imageView.image = (RQStringIsNotEmpty(viewModel.icon))?RQImageNamed(viewModel.icon):nil;
  73. self.detailTextLabel.text = viewModel.subtitle;
  74. /// 设置全新
  75. if (RQStringIsNotEmpty(viewModel.centerLeftViewName)) {
  76. self.centerLeftView.hidden = NO;
  77. self.centerLeftView.image = RQImageNamed(viewModel.centerLeftViewName);
  78. self.centerLeftView.rq_size = self.centerLeftView.image.size;
  79. }else{
  80. self.centerLeftView.hidden = YES;;
  81. }
  82. /// 设置锁
  83. if (RQStringIsNotEmpty(viewModel.centerRightViewName)) {
  84. self.centerRightView.hidden = NO;
  85. self.centerRightView.image = RQImageNamed(viewModel.centerRightViewName);
  86. self.centerRightView.rq_size = self.centerRightView.image.size;
  87. }else{
  88. self.centerRightView.hidden = YES;;
  89. }
  90. if ([viewModel isKindOfClass:[RQCommonArrowItemViewModel class]]) { /// 纯带箭头
  91. self.accessoryView = self.rightArrow;
  92. if ([viewModel isKindOfClass:[RQCommonAvatarItemViewModel class]]) { // 头像
  93. RQCommonAvatarItemViewModel *avatarViewModel = (RQCommonAvatarItemViewModel *)viewModel;
  94. self.avatarView.hidden = NO;
  95. [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) {
  96. self.avatarView.layer.cornerRadius = self.avatarView.width / 2.f;
  97. self.avatarView.clipsToBounds = YES;
  98. }];
  99. }else if ([viewModel isKindOfClass:[RQCommonQRCodeItemViewModel class]]){ // 二维码
  100. self.qrCodeView.hidden = NO;
  101. }
  102. }else if([viewModel isKindOfClass:[RQCommonSwitchItemViewModel class]]){ /// 开关
  103. // 右边显示开关
  104. RQCommonSwitchItemViewModel *switchViewModel = (RQCommonSwitchItemViewModel *)viewModel;
  105. self.accessoryView = self.rightSwitch;
  106. self.rightSwitch.on = !switchViewModel.off;
  107. }else{
  108. self.accessoryView = nil;
  109. }
  110. }
  111. #pragma mark - 私有方法
  112. - (void)awakeFromNib {
  113. [super awakeFromNib];
  114. }
  115. - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  116. [super setSelected:selected animated:animated];
  117. }
  118. - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
  119. {
  120. if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]){
  121. // 初始化
  122. [self _setup];
  123. // 创建自控制器
  124. [self _setupSubViews];
  125. // 布局子控件
  126. [self _makeSubViewsConstraints];
  127. }
  128. return self;
  129. }
  130. #pragma mark - 初始化
  131. - (void)_setup{
  132. self.contentView.backgroundColor = [UIColor whiteColor];
  133. self.textLabel.textColor = RQ_MAIN_TEXT_COLOR_1;
  134. self.textLabel.font = RQRegularFont_13;
  135. self.detailTextLabel.textColor = RQ_MAIN_TEXT_COLOR_3;
  136. self.detailTextLabel.numberOfLines = 0;
  137. self.detailTextLabel.font = RQRegularFont_13;
  138. }
  139. #pragma mark - 创建自控制器
  140. - (void)_setupSubViews{
  141. /// CoderMikeHe Fixed : 这里需要把divider添加到self,而不是self.contentView ,由于添加了 accessView,导致self.contentView的宽度<self的宽度
  142. // 分割线
  143. UIImageView *divider0 = [[UIImageView alloc] init];
  144. self.divider0 = divider0;
  145. [self addSubview:divider0];
  146. UIImageView *divider1 = [[UIImageView alloc] init];
  147. self.divider1 = divider1;
  148. [self addSubview:divider1];
  149. UIImageView *divider2 = [[UIImageView alloc] init];
  150. self.divider2 = divider2;
  151. [self addSubview:divider2];
  152. divider0.backgroundColor = divider1.backgroundColor = divider2.backgroundColor = RQ_MAIN_LINE_COLOR_1;
  153. /// 添加用户头像
  154. UIImageView *avatarView = [[UIImageView alloc] init];
  155. self.avatarView = avatarView;
  156. avatarView.hidden = YES;
  157. [self.contentView addSubview:avatarView];
  158. /// 设置圆角+线宽
  159. // [avatarView zy_attachBorderWidth:1.0f color:RQColorFromHexString(@"#BFBFBF")];
  160. // [avatarView zy_cornerRadiusAdvance:6.0f rectCornerType:UIRectCornerAllCorners];
  161. /// 二维码照片
  162. UIImageView *qrCodeView = [[UIImageView alloc] initWithImage:RQImageNamed(@"setting_myQR_18x18")];
  163. qrCodeView.hidden = YES;
  164. self.qrCodeView = qrCodeView;
  165. [self.contentView addSubview:qrCodeView];
  166. /// 中间偏左的图片
  167. UIImageView *centerLeftView = [[UIImageView alloc] init];
  168. centerLeftView.hidden = YES;
  169. self.centerLeftView = centerLeftView;
  170. [self.contentView addSubview:centerLeftView];
  171. /// 中间偏左的图片
  172. UIImageView *centerRightView = [[UIImageView alloc] init];
  173. centerRightView.hidden = YES;
  174. self.centerRightView = centerRightView;
  175. [self.contentView addSubview:centerRightView];
  176. }
  177. #pragma mark - 布局子控件
  178. - (void)_makeSubViewsConstraints{
  179. }
  180. #pragma mark - 布局
  181. - (void)layoutSubviews{
  182. [super layoutSubviews];
  183. /// 设置
  184. if ((fabs(self.textLabel.rq_x - self.detailTextLabel.rq_x) <=.1f)) {
  185. /// SubTitle
  186. self.textLabel.rq_bottom = self.detailTextLabel.rq_top;
  187. }else{
  188. self.textLabel.rq_centerY = self.rq_height * .5f;
  189. }
  190. self.divider0.frame = CGRectMake(0, 0, self.rq_width, RQGlobalBottomLineHeight);
  191. self.divider1.frame = CGRectMake(16, self.rq_height-RQGlobalBottomLineHeight, self.rq_width-16, RQGlobalBottomLineHeight);
  192. self.divider2.frame = CGRectMake(0, self.rq_height-RQGlobalBottomLineHeight, self.rq_width, RQGlobalBottomLineHeight);
  193. /// 设置头像
  194. self.avatarView.rq_size = CGSizeMake(34, 34);
  195. self.avatarView.rq_right = self.accessoryView.rq_left - 16;
  196. self.avatarView.rq_centerY = self.rq_height * .5f;
  197. /// 设置二维码
  198. self.qrCodeView.rq_right = self.accessoryView.rq_left - 11;
  199. self.qrCodeView.rq_centerY = self.rq_height * .5f;
  200. /// 配置Artboard
  201. self.centerLeftView.rq_left = self.textLabel.rq_right + 14;
  202. self.centerLeftView.rq_centerY = self.rq_height * .5f;
  203. /// 配置
  204. self.centerRightView.rq_right = self.detailTextLabel.rq_left - 5;
  205. self.centerRightView.rq_centerY = self.rq_height * .5f;
  206. }
  207. #pragma mark - 事件处理
  208. - (void)_switchValueDidiChanged:(UISwitch *)sender{
  209. RQCommonSwitchItemViewModel *switchViewModel = (RQCommonSwitchItemViewModel *)self.viewModel;
  210. switchViewModel.off = !sender.isOn;
  211. }
  212. #pragma mark - Setter Or Getter
  213. - (UIImageView *)rightArrow{
  214. if (_rightArrow == nil) {
  215. _rightArrow = [[UIImageView alloc] initWithImage:RQImageNamed(@"rightArrow")];
  216. }
  217. return _rightArrow;
  218. }
  219. - (UISwitch *)rightSwitch{
  220. if (_rightSwitch == nil) {
  221. _rightSwitch = [[UISwitch alloc] init];
  222. [_rightSwitch addTarget:self action:@selector(_switchValueDidiChanged:) forControlEvents:UIControlEventValueChanged];
  223. }
  224. return _rightSwitch;
  225. }
  226. @end