OOMeetingRoomTableHeaderView.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. //
  2. // OOMeetingRoomTableHeaderView.swift
  3. // o2app
  4. //
  5. // Created by 刘振兴 on 2018/1/18.
  6. // Copyright © 2018年 zone. All rights reserved.
  7. //
  8. import UIKit
  9. protocol OOMeetingRoomTableHeaderViewDelegate {
  10. //选择了指定的日期
  11. func setTheDate(_ startDate:String,_ endDate:String)
  12. }
  13. class OOMeetingRoomTableHeaderView: UIView {
  14. var delegate:OOMeetingRoomTableHeaderViewDelegate?
  15. @IBOutlet weak var selectedDateLabel: UILabel!
  16. @IBOutlet weak var theDateField: UITextField!
  17. @IBOutlet weak var theTimeField: UITextField!
  18. var startDate:String {
  19. let formatter = DateFormatter()
  20. formatter.dateFormat = "yyyy-MM-dd hh:mm"
  21. return formatter.string(from: currentDate)
  22. }
  23. var completedDate:String {
  24. let endDate = Calendar.current.dateComponents([.hour,.minute], from: currentTime)
  25. var dateComp = DateComponents()
  26. dateComp.hour = endDate.hour
  27. dateComp.minute = endDate.minute
  28. let eDate = Calendar.current.date(byAdding: dateComp, to: currentDate)
  29. let formatter = DateFormatter()
  30. formatter.dateFormat = "yyyy-MM-dd hh:mm"
  31. return formatter.string(from: eDate!)
  32. }
  33. var setDelegate:OOMeetingRoomTableHeaderViewDelegate?
  34. private var currentDate = Date()
  35. private var currentTime = Date()
  36. private let formatter = DateFormatter()
  37. private let dateFormat = "yyyy年MM月dd日hh时mm分"
  38. private let timeFormat = "hh时mm分"
  39. override func awakeFromNib() {
  40. formatter.dateFormat = dateFormat
  41. theDateField.text = formatter.string(from: currentDate)
  42. formatter.dateFormat = timeFormat
  43. currentTime = Calendar.current.date(bySettingHour: 1, minute: 0, second: 0, of: currentTime)!
  44. theTimeField.text = formatter.string(from: currentTime)
  45. theDateField.delegate = self
  46. theTimeField.delegate = self
  47. }
  48. func callbackDelegate(){
  49. guard let block = setDelegate else {
  50. return
  51. }
  52. block.setTheDate(startDate, completedDate)
  53. }
  54. func datePickerTapped(_ title:String,_ dateType:UIDatePicker.Mode,_ format:String,_ textField:UITextField) {
  55. let locale = Locale(identifier: "zh")
  56. var theDate = currentDate
  57. if textField == theTimeField {
  58. theDate = currentTime
  59. }
  60. var dateComponents = DateComponents()
  61. dateComponents.month = -12
  62. let threeMonthAgo = Calendar.current.date(byAdding: dateComponents, to: theDate)
  63. dateComponents.month = 12
  64. let nextYearMonthAgo = Calendar.current.date(byAdding: dateComponents, to: theDate)
  65. let datePicker = LWDatePickerDialog(textColor: .red,
  66. buttonColor: .red,
  67. font: UIFont.boldSystemFont(ofSize: 17),
  68. locale:locale ,
  69. showCancelButton: true)
  70. datePicker.show(title,
  71. doneButtonTitle: "确定",
  72. cancelButtonTitle: "取消",
  73. defaultDate: theDate,
  74. minimumDate: threeMonthAgo,
  75. maximumDate: nextYearMonthAgo,
  76. datePickerMode: dateType) { (date) in
  77. if let dt = date {
  78. let formatter = DateFormatter()
  79. formatter.dateFormat = format
  80. textField.text = formatter.string(from: dt)
  81. if textField == self.theDateField {
  82. self.currentDate = dt
  83. }else{
  84. self.currentTime = dt
  85. }
  86. self.callbackDelegate()
  87. }
  88. }
  89. }
  90. }
  91. extension OOMeetingRoomTableHeaderView:UITextFieldDelegate {
  92. func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
  93. if textField == theDateField {
  94. self.datePickerTapped("选择日期", .dateAndTime, dateFormat, textField)
  95. return false
  96. }else if textField == theTimeField {
  97. self.datePickerTapped("选择持续时间", .countDownTimer, timeFormat, textField)
  98. return false
  99. }
  100. return true
  101. }
  102. }