Jelajahi Sumber

make the add contact form better usable with keyboard

Jonas Reinsch 7 tahun lalu
induk
melakukan
69da304e63
1 mengubah file dengan 31 tambahan dan 1 penghapusan
  1. 31 1
      deltachat-ios/NewContactController.swift

+ 31 - 1
deltachat-ios/NewContactController.swift

@@ -54,8 +54,13 @@ class NewContactController: UITableViewController {
     // for creating a new contact
     init() {
         cells = [emailCell, nameCell]
-
         super.init(style: .grouped)
+        emailCell.textField.delegate = self
+        nameCell.textField.delegate = self
+        // always show return key with name field, because
+        // name is optional
+        nameCell.textField.enablesReturnKeyAutomatically = false
+        
         title = "New Contact"
         doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(NewContactController.saveContactButtonPressed))
         doneButton?.isEnabled = false
@@ -68,6 +73,14 @@ class NewContactController: UITableViewController {
         nameCell.textField.addTarget(self, action: #selector(NewContactController.nameTextChanged), for: UIControlEvents.editingChanged)
     }
     
+    override func viewDidAppear(_ animated: Bool) {
+        if emailCell.textField.isEnabled {
+            emailCell.textField.becomeFirstResponder()
+        } else {
+            nameCell.textField.becomeFirstResponder()
+        }
+    }
+    
     @objc func emailTextChanged() {
         let emailText = emailCell.textField.text ?? ""
         
@@ -115,3 +128,20 @@ class NewContactController: UITableViewController {
     }
 }
 
+extension NewContactController: UITextFieldDelegate {
+    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
+        if textField == emailCell.textField {
+            // only switch to next line if email is valid
+            if contactIsValid() {
+                nameCell.textField.becomeFirstResponder()
+            }
+        } else if textField == nameCell.textField {
+            if contactIsValid() {
+                saveContactButtonPressed()
+            }
+        }
+        return true
+    }
+
+    
+}