DatePickerButton.m 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. //
  2. // CustomButton.m
  3. // JasonDevelop
  4. //
  5. // Created by Jason Lee on 2013. 12. 16..
  6. // Copyright (c) jasondevelop. All rights reserved.
  7. //
  8. #import "CommonUtil.h"
  9. #import "DatePickerButton.h"
  10. #import "UIViewController-ActionSheetSimulation.h"
  11. #define kfToolBarHeight 44.0f
  12. #define ksEmptyString @""
  13. #define kUIBtnTintColor [UIColor whiteColor]
  14. @interface DatePickerButtonDatePicker : UIDatePicker {
  15. BOOL changed;
  16. }
  17. @end
  18. @implementation DatePickerButtonDatePicker
  19. - (instancetype)init {
  20. if (self = [super init]) {
  21. self.layer.backgroundColor = [UIColor clearColor].CGColor;
  22. }
  23. return self;
  24. }
  25. - (void)awakeFromNib {
  26. self.layer.backgroundColor = [UIColor clearColor].CGColor;
  27. }
  28. - (void)addSubview:(UIView *)view {
  29. if (!changed) {
  30. changed = YES;
  31. [self setValue:[UIColor whiteColor] forKey:@"textColor"];
  32. }
  33. [super addSubview:view];
  34. }
  35. @end
  36. @interface DatePickerButton () {
  37. DatePickerButtonDatePicker *_datePicker;
  38. UIToolbar *_actionToolbar;
  39. NSDateFormatter *_dateFormmater;
  40. UIView *_simulatedActionSheetView;
  41. }
  42. @end
  43. @implementation DatePickerButton
  44. - (id)initWithCoder:(NSCoder *)aDecoder {
  45. if (self = [super initWithCoder:aDecoder]) {
  46. _datePicker = [[DatePickerButtonDatePicker alloc] init];
  47. }
  48. return self;
  49. }
  50. - (void)awakeFromNib {
  51. [super awakeFromNib];
  52. [self addTarget:self action:@selector(didTouchButton) forControlEvents:UIControlEventTouchUpInside];
  53. }
  54. #pragma mark - UIActionSheet Delegate
  55. - (void)didTouchButton {
  56. [self showPicker];
  57. }
  58. - (void)generateActionSheet {
  59. [_datePicker setDatePickerMode:UIDatePickerModeDate];
  60. _dateFormmater = [CommonUtil dateFormatter];
  61. // if (_pickerMode == DatePickerModeFull) {
  62. // [_dateFormmater setDateFormat:@"yyyy/MM/dd"];
  63. // } else if (_pickerMode == DatePickerModeYear) {
  64. // [_dateFormmater setDateFormat:@"yyyy"];
  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. if (_pickerMode == DatePickerModeFull) {
  91. [_dateFormmater setDateFormat:@"yyyy/MM/dd"];
  92. } else if (_pickerMode == DatePickerModeYear) {
  93. [_dateFormmater setDateFormat:@"yyyy"];
  94. }
  95. //request new category.
  96. NSString *stringDate = [NSString stringWithFormat:@"%@", [_dateFormmater stringFromDate:_datePicker.date]];
  97. [self setTitle:stringDate forState:UIControlStateNormal];
  98. }
  99. - (void)pickerCancelPressed:(id)sender {
  100. [[CommonUtil currentViewController] dismissActionSheetSimulation:_simulatedActionSheetView];
  101. }
  102. - (void)setTitle:(NSString *)title forState:(UIControlState)state {
  103. if ([title isEqualToString:ksEmptyString]) {
  104. [super setTitle:ksEmptyString forState:state];
  105. return;
  106. }
  107. [super setTitle:[CommonUtil formattedDate:title] forState:state];
  108. if (_datePicker) {
  109. NSDateComponents *ds = [CommonUtil dateComponentsFromString:title];
  110. NSDate *date = [[CommonUtil calendar] dateFromComponents:ds];
  111. [_datePicker setDate:date animated:NO];
  112. }
  113. }
  114. - (void)setDate:(NSDate *)date {
  115. NSString *dateString = [CommonUtil stringFromDate:date];
  116. [self setTitle:dateString forState:UIControlStateNormal];
  117. }
  118. - (NSString *)dateString {
  119. if ([[self titleForState:UIControlStateNormal] isEqualToString:ksEmptyString])
  120. return ksEmptyString;
  121. return _datePicker ? [CommonUtil stringFromDate2:_datePicker.date] : ksEmptyString;
  122. }
  123. - (NSString *)formatString {
  124. return _datePicker ? [CommonUtil formattedDate:self.dateString] : ksEmptyString;
  125. }
  126. - (NSDate *)date {
  127. return _datePicker.date;
  128. }
  129. @end