MJRefreshStateTrailer.m 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. //
  2. // MJRefreshStateTrailer.m
  3. // MJRefreshExample
  4. //
  5. // Created by kinarobin on 2020/5/3.
  6. // Copyright © 2020 小码哥. All rights reserved.
  7. //
  8. #import "MJRefreshStateTrailer.h"
  9. @interface MJRefreshStateTrailer() {
  10. /** 显示刷新状态的label */
  11. __unsafe_unretained UILabel *_stateLabel;
  12. }
  13. /** 所有状态对应的文字 */
  14. @property (strong, nonatomic) NSMutableDictionary *stateTitles;
  15. @end
  16. @implementation MJRefreshStateTrailer
  17. #pragma mark - 懒加载
  18. - (NSMutableDictionary *)stateTitles {
  19. if (!_stateTitles) {
  20. self.stateTitles = [NSMutableDictionary dictionary];
  21. }
  22. return _stateTitles;
  23. }
  24. - (UILabel *)stateLabel {
  25. if (!_stateLabel) {
  26. UILabel *stateLabel = [UILabel mj_label];
  27. stateLabel.numberOfLines = 0;
  28. [self addSubview:_stateLabel = stateLabel];
  29. }
  30. return _stateLabel;
  31. }
  32. #pragma mark - 公共方法
  33. - (instancetype)setTitle:(NSString *)title forState:(MJRefreshState)state {
  34. if (title == nil) return self;
  35. self.stateTitles[@(state)] = title;
  36. self.stateLabel.text = self.stateTitles[@(self.state)];
  37. return self;
  38. }
  39. - (void)textConfiguration {
  40. // 初始化文字
  41. [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerIdleText] forState:MJRefreshStateIdle];
  42. [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerPullingText] forState:MJRefreshStatePulling];
  43. [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerPullingText] forState:MJRefreshStateRefreshing];
  44. }
  45. #pragma mark - 覆盖父类的方法
  46. - (void)prepare {
  47. [super prepare];
  48. [self textConfiguration];
  49. }
  50. - (void)i18nDidChange {
  51. [self textConfiguration];
  52. [super i18nDidChange];
  53. }
  54. - (void)setState:(MJRefreshState)state {
  55. MJRefreshCheckState
  56. // 设置状态文字
  57. self.stateLabel.text = self.stateTitles[@(state)];
  58. }
  59. - (void)placeSubviews {
  60. [super placeSubviews];
  61. if (self.stateLabel.hidden) return;
  62. BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0;
  63. CGFloat stateLabelW = ceil(self.stateLabel.font.pointSize);
  64. // 状态
  65. if (noConstrainsOnStatusLabel) {
  66. self.stateLabel.center = CGPointMake(self.mj_w * 0.5, self.mj_h * 0.5);
  67. self.stateLabel.mj_size = CGSizeMake(stateLabelW, self.mj_h) ;
  68. }
  69. }
  70. @end