[ios] iOS-UITextField 외부를 터치 할 때 키보드 해제

사용자가 외부를 터치하면 키보드가 사라지는 방법이 궁금합니다 UITextField.



답변

를 추가 UITapGestureRecogniser하고보기에 할당 한 다음 UITextField선택기에서 첫 번째 응답자에게 서명을 요청해야 합니다.

코드:

viewDidLoad에서

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

dismissKeyboard에서 :

-(void)dismissKeyboard
{
    [aTextField resignFirstResponder];
}

( aTextField키보드를 담당하는 텍스트 필드는 어디에 있습니까 )

스위프트 3 버전은 다음과 같습니다

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard (_:)))
self.view.addGestureRecognizer(tapGesture)

dismissKeyboard의 경우

func dismissKeyboard (_ sender: UITapGestureRecognizer) {
    aTextField.resignFirstResponder()
}


답변

나는 몇 가지 답변을 으깨었다.

동안 초기화되는 ivar을 사용하십시오. viewDidLoad:

UIGestureRecognizer *tapper;

- (void)viewDidLoad
{
    [super viewDidLoad];
    tapper = [[UITapGestureRecognizer alloc]
                initWithTarget:self action:@selector(handleSingleTap:)];
    tapper.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapper];
}

현재 편집중인 내용을 닫습니다.

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}


답변

이것을 확인하십시오. 이것이 가장 쉬운 방법 일 것입니다.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      [self.view endEditing:YES];// this will do the trick
}

또는

이 라이브러리는 스크롤 막대 자동 스크롤, 키보드를 숨길 수있는 탭 공간 등을 처리합니다.

https://github.com/michaeltyson/TPKeyboardAvoiding


답변

일부 사람들은이 UITapGestureRecognizer방법을 사용하는 데 문제가있는 것으로 보입니다 . 기존 버튼의 탭 동작을 그대로 유지 하면서이 기능을 수행하는 가장 쉬운 방법은 @ Jensen2k의 답변에 한 줄만 추가하는 것입니다.

[tap setCancelsTouchesInView:NO];

이것은 @Dmitry Sitnikov의 방법을 사용하지 않고 기존 버튼이 계속 작동하도록했습니다.

그것에 대해 읽으 property십시오 (검색 CancelsTouchesInView) : UIGestureRecognizer 클래스 참조

일부에 문제가 있음을 알기 때문에 스크롤 막대에서 어떻게 작동하는지 잘 모르겠지만 다른 사람이 내가 가진 것과 동일한 시나리오를 겪을 수도 있습니다.


답변

당신의 수 있도록하는 것이 좋습니다 UIView의 인스턴스를 UIControl(인터페이스 빌더)와 그들의 연결 TouchUpInside이벤트를 dismissKeyboard하는 방법. 이 IBAction방법은 다음과 같습니다.

- (IBAction)dismissKeyboard:(id)sender {
    [aTextBox resignFirstResponder];
}


답변

스위프트 4

다음 UIViewController과 같이이 확장 방법으로 설정하십시오 viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()
    self.setupHideKeyboardOnTap()
}

를 누르면 키보드가 사라집니다 NavigationBar.

import UIKit
extension UIViewController {
    /// Call this once to dismiss open keyboards by tapping anywhere in the view controller
    func setupHideKeyboardOnTap() {
        self.view.addGestureRecognizer(self.endEditingRecognizer())
        self.navigationController?.navigationBar.addGestureRecognizer(self.endEditingRecognizer())
    }

    /// Dismisses the keyboard from self.view
    private func endEditingRecognizer() -> UIGestureRecognizer {
        let tap = UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:)))
        tap.cancelsTouchesInView = false
        return tap
    }
}


답변

Swift 버전은 다른 요소 (예 : a UIButton또는 other)와 함께 작동합니다 UITextField.

override func viewDidLoad() {
    super.viewDidLoad()

    let tapper = UITapGestureRecognizer(target: self, action:#selector(endEditing))
    tapper.cancelsTouchesInView = false
    view.addGestureRecognizer(tapper)
}