UITableView의 터치 이벤트를 ViewController에 전달하는 방법

UITableView의 터치 이벤트를 ViewController에 전달하는 방법

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") } } CustomeTableViewをセット

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 클래스를 사용하고 있는 임의의 파트에 있어서 의도하지 않은 동작을 시켜 버리므로, 커스텀 클래스를 작성하는 것을 추천 합니다.

조금이라도 도움이되면 다행입니다.

좋은 웹페이지 즐겨찾기