BaseNavView.m 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. //
  2. // BaseNavView.m
  3. // 乐销
  4. //
  5. // Created by 隋林栋 on 2016/12/17.
  6. // Copyright © 2016年 ping. All rights reserved.
  7. //
  8. #import "BaseNavView.h"
  9. //base alert view
  10. //#import "BaseAlertView.h"
  11. @implementation BaseNavView
  12. //初始化
  13. - (instancetype)init {
  14. self = [super init];
  15. if (self) {
  16. self.backgroundColor = [UIColor colorWithHexString:@"#3875F6"];
  17. self.frame = CGRectMake(0, 0, SCREEN_WIDTH, NAVIGATIONBAR_HEIGHT);
  18. }
  19. return self;
  20. }
  21. //懒加载
  22. - (UILabel *)labelTitle{
  23. if (!_labelTitle) {
  24. _labelTitle = [UILabel new];
  25. [GlobalMethod setLabel:_labelTitle widthLimit:SCREEN_WIDTH - W(50) * 2 numLines:1 fontNum:F(18) textColor:[UIColor whiteColor] text:@""];
  26. _labelTitle.font = [UIFont fontWithName:@"PingFangSC-Semibold" size:F(18)];
  27. }
  28. return _labelTitle;
  29. }
  30. - (UIControl *)backBtn{
  31. if (!_backBtn) {
  32. _backBtn = [UIControl new];
  33. _backBtn.tag = TAG_KEYBOARD;
  34. [_backBtn addTarget:self action:@selector(btnBackClick) forControlEvents:UIControlEventTouchUpInside];
  35. [BaseNavView resetControl:_backBtn imageName:@"icon_titlebar_whiteback" isLeft:true];
  36. }
  37. return _backBtn;
  38. }
  39. #pragma mark 类方法
  40. //刷新页面
  41. + (instancetype)initNavTitle:(NSString *)title
  42. leftView:(UIView *)leftView
  43. rightView:(UIView *)rigthView{
  44. BaseNavView * baseNav = [self new];
  45. [baseNav resetNavTitle:title leftView:leftView rightView:rigthView];
  46. return baseNav;
  47. }
  48. //左返回 右view
  49. + (instancetype)initNavBackTitle:(NSString *)title
  50. rightView:(UIView *)rigthView{
  51. BaseNavView * baseNav = [self new];
  52. [baseNav resetNavBackTitle:title rightView:rigthView];
  53. return baseNav;
  54. }
  55. //左图片 右图片
  56. + (instancetype)initNavTitle:(NSString *)title
  57. leftImageName:(NSString *)leftImageName
  58. leftBlock:(void (^)(void))leftBlock
  59. rightImageName:(NSString *)rightImageName
  60. righBlock:(void (^)(void))rightBlock{
  61. BaseNavView * baseNav = [self new];
  62. [baseNav resetNavTitle:title leftImageName:leftImageName leftBlock:leftBlock rightImageName:rightImageName righBlock:rightBlock];
  63. return baseNav;
  64. }
  65. //左返回 右图片
  66. + (instancetype)initNavBackWithTitle:(NSString *)title
  67. rightImageName:(NSString *)rightImageName
  68. righBlock:(void (^)(void))rightBlock{
  69. BaseNavView * baseNav = [self new];
  70. [baseNav resetNavBackWithTitle:title rightImageName:rightImageName righBlock:rightBlock];
  71. return baseNav;
  72. }
  73. //返回 右文字
  74. + (instancetype)initNavBackTitle:(NSString *)title
  75. rightTitle:(NSString *)rightTitle
  76. rightBlock:(void (^)(void))rightBlock{
  77. BaseNavView * baseNav = [self new];
  78. [baseNav initNavBackTitle:title rightTitle:rightTitle rightBlock:rightBlock];
  79. return baseNav;
  80. }
  81. //返回 右文字
  82. - (void)initNavBackTitle:(NSString *)title
  83. rightTitle:(NSString *)rightTitle
  84. rightBlock:(void (^)(void))rightBlock{
  85. self.rightBlock = rightBlock;
  86. if (!isStr(rightTitle)){
  87. [self resetNavTitle:title leftView:self.backBtn rightView:nil];
  88. return;
  89. }
  90. UIControl * con = [UIControl new];
  91. con.tag = TAG_KEYBOARD;
  92. [BaseNavView resetControl:con title:rightTitle isLeft:false];
  93. [con addTarget:self action:@selector(btnRightClick) forControlEvents:UIControlEventTouchUpInside];
  94. [self resetNavTitle:title leftView:self.backBtn rightView:con];
  95. }
  96. //刷新页面 左view 右view
  97. - (void)resetNavTitle:(NSString *)title
  98. leftView:(UIView *)leftView
  99. rightView:(UIView *)rightView{
  100. //set title
  101. [self.labelTitle fitTitle:title variable:SCREEN_WIDTH - W(50) * 2];
  102. self.labelTitle.centerX = self.width/2.0;
  103. self.labelTitle.centerY = (NAVIGATIONBAR_HEIGHT - STATUSBAR_HEIGHT)/2.0 + STATUSBAR_HEIGHT;
  104. [self addSubview:self.labelTitle];
  105. //reset left view
  106. [self resetNavLeftView:leftView];
  107. //reset right view
  108. [self resetNavRightView:rightView];
  109. [self removeSubViewWithTag:TAG_LINE];
  110. }
  111. - (void)resetNavRightView:(UIView *)rightView{
  112. //right view
  113. if (rightView != nil) {
  114. self.rightView = rightView;
  115. rightView.frame = CGRectMake(SCREEN_WIDTH - rightView.width, STATUSBAR_HEIGHT, rightView.width, NAVIGATIONBAR_HEIGHT - STATUSBAR_HEIGHT);
  116. [self addSubview:rightView];
  117. }
  118. }
  119. - (void)resetNavLeftView:(UIView *)leftView{
  120. //left view
  121. if (leftView != nil) {
  122. self.leftView = leftView;
  123. leftView.frame = CGRectMake(0, STATUSBAR_HEIGHT, leftView.width, NAVIGATIONBAR_HEIGHT - STATUSBAR_HEIGHT);
  124. [self addSubview:leftView];
  125. }
  126. }
  127. //左返回 右view
  128. - (void)resetNavBackTitle:(NSString *)title
  129. rightView:(UIView *)rigthView{
  130. [self resetNavTitle:title leftView:self.backBtn rightView:rigthView];
  131. }
  132. //左图片 右图片
  133. - (void)resetNavTitle:(NSString *)title
  134. leftImageName:(NSString *)leftImageName
  135. leftBlock:(void (^)(void))leftBlock
  136. rightImageName:(NSString *)rightImageName
  137. righBlock:(void (^)(void))rightBlock{
  138. UIView * leftView = nil;
  139. if (leftImageName != nil) {
  140. self.leftBlock = leftBlock;
  141. UIControl * con = [UIControl new];
  142. [BaseNavView resetControl:con imageName:leftImageName isLeft:true];
  143. [con addTarget:self action:@selector(btnLeftClick) forControlEvents:UIControlEventTouchUpInside];
  144. leftView = con;
  145. }
  146. UIView * rightView = nil;
  147. if (rightImageName != nil) {
  148. self.rightBlock = rightBlock;
  149. UIControl * con = [UIControl new];
  150. [BaseNavView resetControl:con imageName:rightImageName isLeft:false];
  151. [con addTarget:self action:@selector(btnRightClick) forControlEvents:UIControlEventTouchUpInside];
  152. rightView = con;
  153. }
  154. [self resetNavTitle:title leftView:leftView rightView:rightView];
  155. }
  156. //返回 右图片
  157. - (void)resetNavBackWithTitle:(NSString *)title
  158. rightImageName:(NSString *)rightImageName
  159. righBlock:(void (^)(void))rightBlock{
  160. self.rightBlock = rightBlock;
  161. UIControl * con = [UIControl new];
  162. [BaseNavView resetControl:con imageName:rightImageName isLeft:false];
  163. [con addTarget:self action:@selector(btnRightClick) forControlEvents:UIControlEventTouchUpInside];
  164. [self resetNavTitle:title leftView:self.backBtn rightView:con];
  165. }
  166. //更改title
  167. - (void)changeTitle:(NSString *)title{
  168. [self.labelTitle fitTitle:title variable:0];
  169. self.labelTitle.centerX = self.width/2.0;
  170. }
  171. //更改nav right title
  172. - (void)changeRightTitle:(NSString *)rightTitle{
  173. [self.rightView removeFromSuperview];
  174. UIControl * con = [UIControl new];
  175. con.tag = TAG_KEYBOARD;
  176. [BaseNavView resetControl:con title:rightTitle isLeft:false];
  177. [con addTarget:self action:@selector(btnRightClick) forControlEvents:UIControlEventTouchUpInside];
  178. [self resetNavRightView:con];
  179. }
  180. //更改nav right image
  181. - (void)changeRightImage:(NSString *)rightImageName{
  182. [self.rightView removeFromSuperview];
  183. UIControl * con = [UIControl new];
  184. [BaseNavView resetControl:con imageName:rightImageName isLeft:false];
  185. [con addTarget:self action:@selector(btnRightClick) forControlEvents:UIControlEventTouchUpInside];
  186. [self resetNavRightView:con];
  187. }
  188. #pragma mark 点击事件
  189. //back btn click
  190. - (void)btnBackClick{
  191. if (self.blockBack) {
  192. self.blockBack();
  193. }else{
  194. [self popVC];
  195. }
  196. }
  197. - (void)popVC{
  198. UIViewController * vcRespond = [self fetchVC];
  199. if (vcRespond && [vcRespond isKindOfClass:UIViewController.class] && vcRespond.blockWillBack) {
  200. vcRespond.blockWillBack(vcRespond);
  201. }else{
  202. [GB_Nav popViewControllerAnimated:true];
  203. }
  204. }
  205. - (void)btnRightClick{
  206. if (self.rightBlock != nil) {
  207. self.rightBlock();
  208. }
  209. }
  210. - (void)btnLeftClick{
  211. if (self.leftBlock != nil) {
  212. self.leftBlock();
  213. }
  214. }
  215. #pragma mark 通用方法
  216. + (void)resetControl:(UIView*) control
  217. imageName:(NSString *) imageName
  218. isLeft:(BOOL)isLeft{
  219. control.backgroundColor = [UIColor clearColor];
  220. [control removeAllSubViews];
  221. UIImageView * iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
  222. iv.backgroundColor = [UIColor clearColor];
  223. if (isLeft) {
  224. control.frame = CGRectMake(0, STATUSBAR_HEIGHT, W(100), NAVIGATIONBAR_HEIGHT - STATUSBAR_HEIGHT);
  225. iv.left = W(15);
  226. } else {
  227. control.frame = CGRectMake(SCREEN_WIDTH - W(100), STATUSBAR_HEIGHT, W(100), NAVIGATIONBAR_HEIGHT - STATUSBAR_HEIGHT);
  228. iv.right = control.width - W(15);
  229. }
  230. iv.centerY = control.height/2.0;
  231. [control addSubview: iv];
  232. }
  233. + (void)resetControl:(UIView*) control
  234. title:(NSString *) title
  235. isLeft:(BOOL)isLeft{
  236. control.backgroundColor = [UIColor clearColor];
  237. [control removeAllSubViews];
  238. UILabel * label = [UILabel new];
  239. label.numLimit = 6;
  240. label.numberOfLines = 1;
  241. label.textColor = [UIColor whiteColor];
  242. label.fontNum = BASENAVVIEW_LEFT_TITLE_FONT_NUM;
  243. label.backgroundColor = [UIColor clearColor];
  244. [label fitTitle:title variable:0];
  245. if (isLeft) {
  246. control.frame = CGRectMake(0, STATUSBAR_HEIGHT, W(100), NAVIGATIONBAR_HEIGHT - STATUSBAR_HEIGHT);
  247. label.left = W(20);
  248. } else {
  249. control.frame = CGRectMake(SCREEN_WIDTH - W(100), STATUSBAR_HEIGHT, W(100), NAVIGATIONBAR_HEIGHT - STATUSBAR_HEIGHT);
  250. label.right = control.width - W(20);
  251. }
  252. label.centerY = control.height/2.0;
  253. [control addSubview: label];
  254. }
  255. //设置蓝色模式
  256. - (void)restBlueStyle{
  257. [self removeSubViewWithTag:TAG_LINE];
  258. self.labelTitle.textColor = [UIColor whiteColor];
  259. self.backgroundColor = COLOR_BLUE;
  260. [BaseNavView resetControl:self.backBtn imageName:@"left_blue" isLeft:true];
  261. }
  262. @end