MJRefreshStateTrailer.m 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. return self;
  37. }
  38. - (void)textConfiguration {
  39. // 初始化文字
  40. [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerIdleText] forState:MJRefreshStateIdle];
  41. [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerPullingText] forState:MJRefreshStatePulling];
  42. [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshTrailerPullingText] forState:MJRefreshStateRefreshing];
  43. }
  44. #pragma mark - 覆盖父类的方法
  45. - (void)prepare {
  46. [super prepare];
  47. [self textConfiguration];
  48. }
  49. - (void)i18nDidChange {
  50. [self textConfiguration];
  51. [super i18nDidChange];
  52. }
  53. - (void)setState:(MJRefreshState)state {
  54. MJRefreshCheckState
  55. // 设置状态文字
  56. self.stateLabel.text = self.stateTitles[@(state)];
  57. }
  58. - (void)placeSubviews {
  59. [super placeSubviews];
  60. if (self.stateLabel.hidden) return;
  61. BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0;
  62. CGFloat stateLabelW = ceil(self.stateLabel.font.pointSize);
  63. // 状态
  64. if (noConstrainsOnStatusLabel) {
  65. self.stateLabel.center = CGPointMake(self.mj_w * 0.5, self.mj_h * 0.5);
  66. self.stateLabel.mj_size = CGSizeMake(stateLabelW, self.mj_h) ;
  67. }
  68. }
  69. @end