PGDatePicker+DateHourMinuteSecond.m 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //
  2. // PGDatePicker+DateHourMinuteSecond.m
  3. // Demo
  4. //
  5. // Created by piggybear on 2018/3/18.
  6. // Copyright © 2018年 piggybear. All rights reserved.
  7. //
  8. #import "PGDatePicker+DateHourMinuteSecond.h"
  9. #import "PGDatePickerHeader.h"
  10. #import "PGDatePicker+Common.h"
  11. #import "PGDatePicker+Logic.h"
  12. @implementation PGDatePicker (DateHourMinuteSecond)
  13. - (void)dateHourMinuteSecond_setupSelectedDate {
  14. NSString *yearString = [self.pickerView textOfSelectedRowInComponent:0];
  15. yearString = [yearString componentsSeparatedByString:self.yearString].firstObject;
  16. self.selectedComponents.year = [yearString integerValue];
  17. NSString *monthString = [self.pickerView textOfSelectedRowInComponent:1];
  18. monthString = [monthString componentsSeparatedByString:self.monthString].firstObject;
  19. self.selectedComponents.month = [monthString integerValue];
  20. NSString *dayString = [self.pickerView textOfSelectedRowInComponent:2];
  21. dayString = [dayString componentsSeparatedByString:self.dayString].firstObject;
  22. self.selectedComponents.day = [dayString integerValue];
  23. NSString *hourString = [self.pickerView textOfSelectedRowInComponent:3];
  24. hourString = [hourString componentsSeparatedByString:self.hourString].firstObject;
  25. self.selectedComponents.hour = [hourString integerValue];
  26. NSString *minuteString = [self.pickerView textOfSelectedRowInComponent:4];
  27. minuteString = [minuteString componentsSeparatedByString:self.minuteString].firstObject;
  28. self.selectedComponents.minute = [minuteString integerValue];
  29. NSString *secondString = [self.pickerView textOfSelectedRowInComponent:5];
  30. secondString = [secondString componentsSeparatedByString:self.secondString].firstObject;
  31. self.selectedComponents.second = [secondString integerValue];
  32. }
  33. - (void)dateHourMinuteSecond_setDateWithComponents:(NSDateComponents *)components animated:(BOOL)animated {
  34. BOOL tf = false;
  35. if (components.year > self.maximumComponents.year) {
  36. components.year = self.maximumComponents.year;
  37. tf = true;
  38. }else if (components.year < self.minimumComponents.year) {
  39. components.year = self.minimumComponents.year;
  40. tf = true;
  41. }
  42. NSInteger row = components.year - self.minimumComponents.year;
  43. [self.pickerView selectRow:row inComponent:0 animated:animated];
  44. if (tf) {
  45. return;
  46. }
  47. {
  48. NSInteger row = 0;
  49. NSString *string = [NSString stringWithFormat:@"%ld", components.month];
  50. BOOL isExist = [self.monthList containsObject:string];
  51. if (isExist) {
  52. row = [self.monthList indexOfObject:string];
  53. }
  54. [self.pickerView selectRow:row inComponent:1 animated:animated];
  55. }
  56. {
  57. NSInteger row = 0;
  58. NSString *string = [NSString stringWithFormat:@"%ld", components.day];
  59. BOOL isExist = [self.dayList containsObject:string];
  60. if (isExist) {
  61. row =[self.dayList indexOfObject:string];
  62. }
  63. [self.pickerView selectRow:row inComponent:2 animated:animated];
  64. }
  65. {
  66. NSInteger row = 0;
  67. NSString *string = [NSString stringWithFormat:@"%ld", components.hour];
  68. if (components.hour < 10) {
  69. string = [NSString stringWithFormat:@"0%ld", components.hour];
  70. }
  71. BOOL isExist = [self.hourList containsObject:string];
  72. if (isExist) {
  73. row = [self.hourList indexOfObject:string];
  74. }
  75. [self.pickerView selectRow:row inComponent:3 animated:animated];
  76. }
  77. {
  78. NSInteger row = 0;
  79. NSString *string = [NSString stringWithFormat:@"%ld", components.minute];
  80. if (components.minute < 10) {
  81. string = [NSString stringWithFormat:@"0%ld", components.minute];
  82. }
  83. BOOL isExist = [self.minuteList containsObject:string];
  84. if (isExist) {
  85. row = [self.minuteList indexOfObject:string];
  86. }
  87. [self.pickerView selectRow:row inComponent:4 animated:animated];
  88. }
  89. {
  90. NSString *string = [NSString stringWithFormat:@"%ld", components.second];
  91. if (components.second < 10) {
  92. string = [NSString stringWithFormat:@"0%ld", components.second];
  93. }
  94. NSInteger row = 0;
  95. BOOL isExist = [self.secondList containsObject:string];
  96. if (isExist) {
  97. row = [self.secondList indexOfObject:string];
  98. }
  99. [self.pickerView selectRow:row inComponent:5 animated:animated];
  100. }
  101. }
  102. - (void)dateHourMinuteSecond_didSelectWithComponent:(NSInteger)component {
  103. NSDateComponents *dateComponents = [self.calendar components:self.unitFlags fromDate:[NSDate date]];
  104. NSString *str = [[self.pickerView textOfSelectedRowInComponent:0] componentsSeparatedByString:self.yearString].firstObject;
  105. dateComponents.year = [str integerValue];
  106. if (component == 0) {
  107. BOOL refresh = [self setMonthListWithComponents:dateComponents refresh:true];
  108. [self.pickerView reloadComponent:1 refresh:refresh];
  109. }
  110. if (component == 0 || component == 1) {
  111. BOOL refresh = [self setDayListWithComponent:component dateComponents:dateComponents refresh:true];
  112. [self.pickerView reloadComponent:2 refresh:refresh];
  113. }
  114. if (component == 0 || component == 1 || component == 2) {
  115. BOOL refresh = [self setHourList2WithDateComponents:dateComponents refresh:true];
  116. [self.pickerView reloadComponent:3 refresh:refresh];
  117. }
  118. if (component == 0 || component == 1 || component == 2 || component == 3) {
  119. BOOL refresh = [self setMinuteList2WithComponent:component dateComponents:dateComponents refresh:true];
  120. [self.pickerView reloadComponent:4 refresh:refresh];
  121. }
  122. if (component != 5) {
  123. BOOL refresh = [self setSecondList2WithComponent:component dateComponents:dateComponents refresh:true];
  124. [self.pickerView reloadComponent:5 refresh:refresh];
  125. }
  126. }
  127. @end