UITableView의 터치 이벤트를 ViewController에 전달하는 방법
5384 단어 iOSUITableViewSwift3.0Swift우이
1. 곤란한 일
TableViewCell에서 TextField를 선택한 후 다른 곳을 탭해도 키보드가 사라지지 않습니다.
UITablelView 내의 탭 이벤트는 UIViewController에 전해지지 않기 때문에, 아무래도 지울 수 없었다…
2. 어떻게 하고 싶은가
키보드를 지우고 싶습니다. 3. 어떻게 해결했는가
UITableView를 상속한 CustomTableView를 만들고 touchesBegan을 재정의하고 UIViewController에 touchesBegan을 연결했습니다.
CustomTableView.swift
import Foundation
import UIKit
class CustomTableView: UITableView {
override open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("chain to the next responder")
// touchesBegan을 다음 Responder로
self.next?.touchesBegan(touches, with: event)
}
override open func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touches ended")
}
}
UITexFieldDelegate를 추가하고 touchesBegan()을 재정의하고 self.view.endEditing(true)를 작성합니다.
SettingsViewController.swift
import UIKit
class SettingsViewController: UITableViewController, UIPickerViewDelegate, UIImagePickerControllerDelegate, UITextFieldDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate {
// code
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print(event!)
self.view.endEditing(true)
if (useridTextField.isFirstResponder) {
useridTextField.resignFirstResponder()
}
if (usernameTextField.isFirstResponder) {
usernameTextField.resignFirstResponder()
}
if (postalcodeTextField.isFirstResponder) {
postalcodeTextField.resignFirstResponder()
}
if (addressTextField.isFirstResponder) {
addressTextField.resignFirstResponder()
}
}
TableView에서 셀로 TextField를 배치하고 다른 위치를 선택한 경우 편집 종료로 키보드를 닫는 설명은 위와 같습니다.
당초는 Extension UITableVlew로 하고 있었지만, 그렇게 하면 기존의 UITableView 클래스를 사용하고 있는 임의의 파트에 있어서 의도하지 않은 동작을 시켜 버리므로, 커스텀 클래스를 작성하는 것을 추천 합니다.
조금이라도 도움이되면 다행입니다.
Reference
이 문제에 관하여(UITableView의 터치 이벤트를 ViewController에 전달하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Rascal/items/c604223578a8c0a6b713
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import UIKit
class SettingsViewController: UITableViewController, UIPickerViewDelegate, UIImagePickerControllerDelegate, UITextFieldDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate {
// code
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print(event!)
self.view.endEditing(true)
if (useridTextField.isFirstResponder) {
useridTextField.resignFirstResponder()
}
if (usernameTextField.isFirstResponder) {
usernameTextField.resignFirstResponder()
}
if (postalcodeTextField.isFirstResponder) {
postalcodeTextField.resignFirstResponder()
}
if (addressTextField.isFirstResponder) {
addressTextField.resignFirstResponder()
}
}
Reference
이 문제에 관하여(UITableView의 터치 이벤트를 ViewController에 전달하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Rascal/items/c604223578a8c0a6b713텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)