UIBarButtonItem+WZLBadge.m 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. //
  2. // UIBarButtonItem+WZLBadge.m
  3. // WZLBadgeDemo
  4. //
  5. // Created by zilin_weng on 15/8/10.
  6. // Copyright (c) 2015年 Weng-Zilin. All rights reserved.
  7. //
  8. #import "UIBarButtonItem+WZLBadge.h"
  9. #import <objc/runtime.h>
  10. #define kActualView [self getActualBadgeSuperView]
  11. @implementation UIBarButtonItem (WZLBadge)
  12. #pragma mark -- public methods
  13. /**
  14. * show badge with red dot style and WBadgeAnimTypeNone by default.
  15. */
  16. - (void)showBadge
  17. {
  18. [kActualView showBadge];
  19. }
  20. /**
  21. * showBadge
  22. *
  23. * @param style WBadgeStyle type
  24. * @param value (if 'style' is WBadgeStyleRedDot or WBadgeStyleNew,
  25. this value will be ignored. In this case, any value will be ok.)
  26. * @param aniType
  27. */
  28. - (void)showBadgeWithStyle:(WBadgeStyle)style
  29. value:(NSInteger)value
  30. animationType:(WBadgeAnimType)aniType
  31. {
  32. [kActualView showBadgeWithStyle:style value:value animationType:aniType];
  33. }
  34. /**
  35. * clear badge
  36. */
  37. - (void)clearBadge
  38. {
  39. [kActualView clearBadge];
  40. }
  41. - (void)resumeBadge
  42. {
  43. [kActualView resumeBadge];
  44. }
  45. #pragma mark -- private method
  46. /**
  47. * Because UIBarButtonItem is kind of NSObject, it is not able to directly attach badge.
  48. This method is used to find actual view (non-nil) inside UIBarButtonItem instance.
  49. *
  50. * @return view
  51. */
  52. - (UIView *)getActualBadgeSuperView
  53. {
  54. return [self valueForKeyPath:@"_view"];//use KVC to hack actual view
  55. }
  56. #pragma mark -- setter/getter
  57. - (UILabel *)badge
  58. {
  59. return kActualView.badge;
  60. }
  61. - (void)setBadge:(UILabel *)label
  62. {
  63. [kActualView setBadge:label];
  64. }
  65. - (UIFont *)badgeFont
  66. {
  67. return kActualView.badgeFont;
  68. }
  69. - (void)setBadgeFont:(UIFont *)badgeFont
  70. {
  71. [kActualView setBadgeFont:badgeFont];
  72. }
  73. - (UIColor *)badgeBgColor
  74. {
  75. return [kActualView badgeBgColor];
  76. }
  77. - (void)setBadgeBgColor:(UIColor *)badgeBgColor
  78. {
  79. [kActualView setBadgeBgColor:badgeBgColor];
  80. }
  81. - (UIColor *)badgeTextColor
  82. {
  83. return [kActualView badgeTextColor];
  84. }
  85. - (void)setBadgeTextColor:(UIColor *)badgeTextColor
  86. {
  87. [kActualView setBadgeTextColor:badgeTextColor];
  88. }
  89. - (WBadgeAnimType)aniType
  90. {
  91. return [kActualView aniType];
  92. }
  93. - (void)setAniType:(WBadgeAnimType)aniType
  94. {
  95. [kActualView setAniType:aniType];
  96. }
  97. - (CGRect)badgeFrame
  98. {
  99. return [kActualView badgeFrame];
  100. }
  101. - (void)setBadgeFrame:(CGRect)badgeFrame
  102. {
  103. [kActualView setBadgeFrame:badgeFrame];
  104. }
  105. - (CGPoint)badgeCenterOffset
  106. {
  107. return [kActualView badgeCenterOffset];
  108. }
  109. - (void)setBadgeCenterOffset:(CGPoint)badgeCenterOffset
  110. {
  111. [kActualView setBadgeCenterOffset:badgeCenterOffset];
  112. }
  113. - (NSInteger)badgeMaximumBadgeNumber
  114. {
  115. return [kActualView badgeMaximumBadgeNumber];
  116. }
  117. - (void)setBadgeMaximumBadgeNumber:(NSInteger)badgeMaximumBadgeNumber
  118. {
  119. [kActualView setBadgeMaximumBadgeNumber:badgeMaximumBadgeNumber];
  120. }
  121. @end