Als ich "TextField" oder "TextView" in die Zelle von "TableView" gestellt habe, hatte ich ein kleines Problem beim Schließen der Tastatur, als ich auf einen anderen Teil als diesen getippt habe, sodass ich ihn als Memorandum veröffentlichen werde.
【Xcode】Version 12.0.1 【Swift】Version 5.3
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
//Erstellen Sie eine Instanz für die Tap-Erkennung
let tapGesture = UITapGestureRecognizer(
target: self,
action: #selector(dismissKeyboard))
tapGesture.cancelsTouchesInView = false
//Zur Ansicht hinzufügen
view.addGestureRecognizer(tapGesture)
}
//Tastatur- und Schließvorgang
@objc public func dismissKeyboard() {
view.endEditing(true)
}
}
extension ViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)
return cell
}
}
class TableViewCell: UITableViewCell {
@IBOutlet weak var textField: UITextField!
override func awakeFromNib() {
super.awakeFromNib()
textField.delegate = self
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
extension TableViewCell: UITextFieldDelegate {
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
Zuerst habe ich versucht, das Touch-Ereignis mit der folgenden von Swift vorbereiteten Funktion abzurufen und die Tastatur zu schließen, aber der Vorgang wurde nicht aufgerufen. Es scheint, dass "UIScrollView" und "UITableView" standardmäßig keine Berührungsereignisse erhalten können.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
Die obige Methode hat nicht funktioniert, daher besteht die Lösung darin, "UITapGestureRecognizer" zu verwenden, um den Abgriff zu erkennen. Geändert, um die Tastatur zu schließen.
//Erstellen Sie eine Instanz für die Tap-Erkennung
let tapGesture = UITapGestureRecognizer(
target: self,
action: #selector(dismissKeyboard))
view.addGestureRecognizer(tapGesture)
//Tastatur- und Schließvorgang
@objc public func dismissKeyboard() {
view.endEditing(true)
}
Wenn Sie "UITapGestureRecognizer" festlegen, wird das Tippen auf andere Ansichten nicht erkannt. Der Grund scheint zu sein, dass cancelsTouchesInView
standardmäßig true
ist und durch Hinzufügen des folgenden Codes gelöst werden kann.
tapGesture.cancelsTouchesInView = false
Meiner Meinung nach war dieses Problem bei der Implementierung des Registrierungsbildschirms für die ursprüngliche App aufgetreten, mit Ausnahme von "TextView" und "TextField", die bei Anzeige der Tastatur im Fokus stehen. Ich denke, es ist okay, es nicht zu berühren.
Recommended Posts