Просмотр исходного кода

Fix share permission date picker cell

Signed-off-by: Henrik Storch <henrik.storch@nextcloud.com>
Henrik Storch 3 лет назад
Родитель
Сommit
7d27e462f9
1 измененных файлов с 35 добавлено и 19 удалено
  1. 35 19
      iOSClient/Share/Advanced/NCShareAdvancePermission.swift

+ 35 - 19
iOSClient/Share/Advanced/NCShareAdvancePermission.swift

@@ -118,6 +118,9 @@ class NCShareAdvancePermission: UITableViewController {
 
     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         guard let cell = shareConfig.cellFor(indexPath: indexPath) else { return UITableViewCell() }
+        if let cell = cell as? DatePickerTableViewCell {
+            cell.onReload = tableView.reloadData
+        }
         return cell
     }
 
@@ -132,7 +135,9 @@ class NCShareAdvancePermission: UITableViewController {
             case .hideDownload:
                 share.hideDownload.toggle()
                 tableView.reloadData()
-            case .expirationDate: tableView.cellForRow(at: indexPath)?.becomeFirstResponder()
+            case .expirationDate:
+                let cell = tableView.cellForRow(at: indexPath) as? DatePickerTableViewCell
+                cell?.textField.becomeFirstResponder()
             case .password:
                 guard share.password.isEmpty else {
                     share.password = ""
@@ -257,7 +262,7 @@ enum Advanced: CaseIterable, ShareCellConfig {
         case .hideDownload:
             return ToggleCell(isOn: share.hideDownload)
         case .expirationDate:
-            return DatePickerTableViewCell(date: share.expirationDate)
+            return DatePickerTableViewCell(share: share)
         case .password: return ToggleCell(isOn: !share.password.isEmpty)
         case .note:
             let cell = UITableViewCell(style: .value1, reuseIdentifier: "shareNote")
@@ -341,30 +346,41 @@ extension DateFormatter {
 
 open class DatePickerTableViewCell: UITableViewCell {
     let picker = UIDatePicker()
+    let textField = UITextField()
+
+    var onReload: (() -> Void)?
 
-    open override func awakeFromNib() {
-        super.awakeFromNib()
+    init(share: tableShare) {
+        super.init(style: .value1, reuseIdentifier: "shareExpDate")
         picker.datePickerMode = .date
         if #available(iOS 13.4, *) {
             picker.preferredDatePickerStyle = .wheels
         }
-    }
-
-    open override var canBecomeFirstResponder: Bool {
-        return true
-    }
-
-    open override var canResignFirstResponder: Bool {
-        return true
-    }
+        picker.action(for: .valueChanged) { datePicker in
+            guard let datePicker = datePicker as? UIDatePicker else { return }
+            self.detailTextLabel?.text = DateFormatter.shareExpDate.string(from: datePicker.date)
+        }
+        accessoryView = textField
+
+        let toolbar = UIToolbar()
+        toolbar.sizeToFit()
+        let doneButton = UIBarButtonItem(title: "_done_", style: .done) {
+            self.resignFirstResponder()
+            share.date = self.picker.date as NSDate
+            self.onReload?()
+        }
+        let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil)
+        let cancelButton = UIBarButtonItem(title: NSLocalizedString("_clear_", comment: ""), style: .plain) {
+            self.resignFirstResponder()
+            share.date = nil
+            self.onReload?()
+        }
+        toolbar.setItems([cancelButton, spaceButton, doneButton], animated: false)
 
-    open override var inputView: UIView? {
-        return picker
-    }
+        textField.inputAccessoryView = toolbar
+        textField.inputView = picker
 
-    init(date: NSDate?) {
-        super.init(style: .value1, reuseIdentifier: "shareExpDate")
-        if let expDate = date {
+        if let expDate = share.date {
             detailTextLabel?.text = DateFormatter.shareExpDate.string(from: expDate as Date)
         }
     }