NIMTimePickerView.m 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //
  2. // NTESTimePickerView.m
  3. // NIM
  4. //
  5. // Created by chris on 15/7/1.
  6. // Copyright (c) 2015年 Netease. All rights reserved.
  7. //
  8. #import "NIMTimePickerView.h"
  9. #import "UIView+NIM.h"
  10. #import "NIMGlobalMacro.h"
  11. @interface NIMTimePickerView()<UIPickerViewDelegate,UIPickerViewDataSource>
  12. @property (nonatomic,strong) UIButton *bkgBtn;
  13. @property (nonatomic,strong) UIPickerView *pickerView;
  14. @property (nonatomic,copy) CompletionHandler handler;
  15. @end
  16. @implementation NIMTimePickerView
  17. - (instancetype)initWithFrame:(CGRect)frame{
  18. self = [super initWithFrame:frame];
  19. if (self) {
  20. self.backgroundColor = NIMKit_UIColorFromRGBA(0x0, .5f);
  21. self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
  22. _bkgBtn = [UIButton buttonWithType:UIButtonTypeSystem];
  23. [_bkgBtn addTarget:self action:@selector(onActionTouchBkgBtn:) forControlEvents:UIControlEventTouchUpInside];
  24. _bkgBtn.frame = self.bounds;
  25. _bkgBtn.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
  26. [self addSubview:_bkgBtn];
  27. _pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 250)];
  28. _pickerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  29. _pickerView.backgroundColor = [UIColor whiteColor];
  30. _pickerView.delegate = self;
  31. _pickerView.dataSource = self;
  32. [self addSubview:_pickerView];
  33. }
  34. return self;
  35. }
  36. - (void)refreshWithHour:(NSInteger)hour minute:(NSInteger)minute{
  37. [self.pickerView selectRow:hour inComponent:0 animated:YES];
  38. [self.pickerView selectRow:minute inComponent:2 animated:YES];
  39. }
  40. - (void)onActionTouchBkgBtn:(id)sender{
  41. NSInteger hour = [self.pickerView selectedRowInComponent:0];
  42. NSInteger minute = [self.pickerView selectedRowInComponent:2];
  43. if ([self.delegate respondsToSelector:@selector(didSelectHour:minute:)]) {
  44. [self.delegate didSelectHour:hour minute:minute];
  45. }
  46. if (self.handler) {
  47. self.handler(hour,minute);
  48. }
  49. [self removeFromSuperview];
  50. }
  51. - (void)showInView:(UIView *)view onCompletion:(CompletionHandler) handler
  52. {
  53. self.frame = view.bounds;
  54. [view addSubview:self];
  55. self.handler = handler;
  56. }
  57. - (void)layoutSubviews{
  58. [super layoutSubviews];
  59. self.pickerView.nim_bottom = self.nim_height;
  60. self.nim_centerX = self.nim_width * .5f;
  61. }
  62. #pragma mark - UIPickerViewDelegate
  63. - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
  64. CGFloat alpha = 0.0f;
  65. switch (component) {
  66. case 0:
  67. alpha = .2f;
  68. break;
  69. case 1:
  70. alpha = .12f;
  71. break;
  72. case 2:
  73. alpha = .2f;
  74. break;
  75. case 3:
  76. alpha = .12f;
  77. break;
  78. default:
  79. break;
  80. }
  81. return pickerView.nim_width * alpha;
  82. }
  83. - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
  84. switch (component) {
  85. case 0: //小时
  86. return [NSString stringWithFormat:@"%02zd",row];
  87. case 1: //小时说明文字
  88. return @"时";
  89. case 2:
  90. return [NSString stringWithFormat:@"%02zd",row];
  91. case 3:
  92. return @"分";
  93. default:
  94. return @"";
  95. }
  96. }
  97. #pragma mark - UIPickerViewDataSource
  98. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
  99. return 4;
  100. }
  101. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
  102. switch (component) {
  103. case 0:
  104. return 24;//小时
  105. case 1:
  106. return 1; //小时说明文字
  107. case 2:
  108. return 60;//分钟
  109. case 3:
  110. return 1; //分钟说明文字
  111. default:
  112. return 0;
  113. }
  114. }
  115. @end