TimePickerButton.m 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. //
  2. // TimePickerButton.m
  3. // JasonDevelop
  4. //
  5. // Created by Jason Lee on 2014. 8. 27..
  6. // Copyright (c) jasondevelop. All rights reserved.
  7. //
  8. #import "CommonUtil.h"
  9. #import "TimePickerButton.h"
  10. #import "UIViewController-ActionSheetSimulation.h"
  11. #define kfToolBarHeight 44.0f
  12. #define kfRoundWidth 2.0f
  13. #define kUIBtnTintColor [UIColor whiteColor]
  14. #define ksEmptyString @""
  15. @interface TimePickerButtonDatePicker : UIDatePicker {
  16. BOOL changed;
  17. }
  18. @end
  19. @implementation TimePickerButtonDatePicker
  20. - (id)initWithCoder:(NSCoder *)aDecoder {
  21. if (self = [super initWithCoder:aDecoder]) {
  22. self.layer.backgroundColor = [UIColor blackColor].CGColor;
  23. }
  24. return self;
  25. }
  26. - (void)awakeFromNib {
  27. self.layer.backgroundColor = [UIColor clearColor].CGColor;
  28. }
  29. - (void)addSubview:(UIView *)view {
  30. if (!changed) {
  31. changed = YES;
  32. [self setValue:[UIColor whiteColor] forKey:@"textColor"];
  33. }
  34. [super addSubview:view];
  35. }
  36. @end
  37. @interface TimePickerButton () {
  38. UIActionSheet *_actionSheet;
  39. TimePickerButtonDatePicker *_datePicker;
  40. NSDateFormatter *_dateFormmater;
  41. UIToolbar *_actionToolbar;
  42. UIView *_simulatedActionSheetView;
  43. }
  44. @end
  45. @implementation TimePickerButton
  46. - (id)initWithCoder:(NSCoder *)aDecoder {
  47. if (self = [super initWithCoder:aDecoder]) {
  48. _datePicker = [[TimePickerButtonDatePicker alloc] initWithFrame:CGRectMake(0, 0, IPHONE_WIDTH, 216)];
  49. [_datePicker setDatePickerMode:UIDatePickerModeTime];
  50. _dateFormmater = [[CommonUtil dateFormatter] copy];
  51. [_dateFormmater setTimeZone:[NSTimeZone systemTimeZone]];
  52. [_dateFormmater setDateFormat:@"HH시 mm분"];
  53. }
  54. return self;
  55. }
  56. - (void)awakeFromNib {
  57. [super awakeFromNib];
  58. [self addTarget:self action:@selector(didTouchButton) forControlEvents:UIControlEventTouchUpInside];
  59. }
  60. #pragma mark - UIActionSheet Delegate
  61. - (void)didTouchButton {
  62. [self showPicker];
  63. }
  64. - (void)generateActionSheet {
  65. //피커뷰를 만듬.
  66. UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"취소" style:UIBarButtonItemStylePlain target:self action:@selector(pickerCancelPressed:)];
  67. UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
  68. UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil];
  69. fixedSpace.width = 10;
  70. UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"선택" style:UIBarButtonItemStylePlain target:self action:@selector(pickerDonePressed:)];
  71. if (IOS_VERSION >= 7.0f) {
  72. cancelButton.tintColor = kUIBtnTintColor;
  73. doneBtn.tintColor = kUIBtnTintColor;
  74. }
  75. CGFloat width = [UIScreen mainScreen].bounds.size.width;
  76. _actionToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, width, kfToolBarHeight)];
  77. _actionToolbar.barStyle = UIBarStyleBlack;
  78. [_actionToolbar setItems:[NSArray arrayWithObjects:fixedSpace, cancelButton, flexSpace, doneBtn, fixedSpace, nil] animated:YES];
  79. _simulatedActionSheetView = [[CommonUtil currentViewController] actionSheetSimulationWithPickerView:_datePicker withToolbar:_actionToolbar];
  80. }
  81. - (void)showPicker {
  82. [[CommonUtil currentViewController].view endEditing:YES];
  83. if (!_simulatedActionSheetView) {
  84. [self generateActionSheet];
  85. }
  86. [[CommonUtil currentViewController] showActionSheetSimulation:_simulatedActionSheetView pickerView:_datePicker withToolbar:_actionToolbar];
  87. }
  88. - (void)pickerDonePressed:(id)sender {
  89. [[CommonUtil currentViewController] dismissActionSheetSimulation:_simulatedActionSheetView];
  90. //request new category.
  91. NSDateComponents *pickerComps = [CommonUtil dateComponents:_datePicker.date];
  92. NSCalendar *cal = [NSCalendar currentCalendar];
  93. NSDate *pickerDate = [cal dateFromComponents:pickerComps];
  94. NSString *stringDate = [NSString stringWithFormat:@"%@", [_dateFormmater stringFromDate:pickerDate]];
  95. [self setTitle:stringDate forState:UIControlStateNormal];
  96. }
  97. - (void)pickerCancelPressed:(id)sender {
  98. [[CommonUtil currentViewController] dismissActionSheetSimulation:_simulatedActionSheetView];
  99. }
  100. - (void)setHour:(NSInteger)hour minute:(NSInteger)minute {
  101. NSCalendar *cal = [NSCalendar currentCalendar];
  102. NSDateComponents *ds = [CommonUtil dateComponents:[NSDate date]];
  103. [ds setHour:hour];
  104. [ds setMinute:minute];
  105. [ds setSecond:0];
  106. NSDate *date = [cal dateFromComponents:ds];
  107. [self setTitle:[CommonUtil stringFromTime:date] forState:UIControlStateNormal];
  108. }
  109. - (void)setTitle:(NSString *)title forState:(UIControlState)state {
  110. if ([title isEqualToString:ksEmptyString]) {
  111. [super setTitle:ksEmptyString forState:state];
  112. return;
  113. }
  114. [super setTitle:[CommonUtil formattedTime:title] forState:state];
  115. if (_datePicker) {
  116. NSDateComponents *ds = [CommonUtil timeComponentsFromString:title];
  117. [ds setTimeZone:[NSTimeZone systemTimeZone]];
  118. NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:ds];
  119. [_datePicker setDate:date animated:NO];
  120. }
  121. }
  122. //- (void)setTime:(NSDate *)time {
  123. // NSString *dateString = [CommonUtil stringFromTime:time];
  124. // [self setTitle:dateString forState:UIControlStateNormal];
  125. //}
  126. - (NSString *)timeString {
  127. if ([[self titleForState:UIControlStateNormal] isEqualToString:ksEmptyString])
  128. return ksEmptyString;
  129. // return _datePicker ? [CommonUtil stringFromTime:_datePicker.date] : ksEmptyString;
  130. NSString *timeString = [NSString stringWithFormat:@"%@", [_dateFormmater stringFromDate:_datePicker.date]];
  131. return _datePicker ? timeString : ksEmptyString;
  132. }
  133. - (NSString *)hourString {
  134. if (!self.dateComponents) {
  135. return nil;
  136. }
  137. NSString *hour = self.dateComponents.hour < 10 ? [NSString stringWithFormat:@"0%zd", self.dateComponents.hour] : [NSString stringWithFormat:@"%zd", self.dateComponents.hour];
  138. return hour;
  139. }
  140. - (NSString *)minuteString {
  141. if (!self.dateComponents) {
  142. return nil;
  143. }
  144. NSString *minute = self.dateComponents.minute < 10 ? [NSString stringWithFormat:@"0%zd", self.dateComponents.minute] : [NSString stringWithFormat:@"%zd", self.dateComponents.minute];
  145. return minute;
  146. }
  147. - (NSDate *)date {
  148. return _datePicker.date;
  149. }
  150. - (NSDateComponents *)dateComponents {
  151. return _datePicker ? [CommonUtil dateComponents:_datePicker.date] : nil;
  152. }
  153. @end