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


461

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


8
Dmitry가 정답을 가졌습니다. 이것은 제스처 문제가 아니라 첫 번째 응답자를 사임하는 문제입니다. Dmirty의 답변은 또한 iOS 4 개발 시작 , 4 장, 83 페이지 에서 Mark, Nutting 및 LeMarche가 권장하는 솔루션입니다.
jww

답변:


760

를 추가 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()
}

6
이것은 작동하지만 작동하는 것은 탐색 막대 버튼을 비활성화하거나 클릭 할 수 없도록 만듭니다. 그래서 이것에 대한 해결책이 있습니까?
Parth Bhatt

137
텍스트 필드에 대한 참조가 필요하지 않고 여러 텍스트 필드에서 작동 [aTextField resignFirstResponder]할 것보다 낫다고 생각 [self.view endEditing:YES];합니다.
Julian Król

90
따라서 방법을 정의 할 필요없이 한 줄짜리는 다음과 같습니다.[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(endEditing:)]];
Subhas

8
@ParthBhatt @qiaoyi [tap setCancelsTouchesInView:NO];의 답변 에 따라 추가했습니다 . 행 선택에 응답하지 않는 테이블에 문제가있었습니다. 5 년 후, 나는 이것이 다른 누군가를 돕기를 바랍니다.
Tom Howard

7
스위프트 원 라이너 : self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
오작동

176

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

동안 초기화되는 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];
}

환상적이며 UITableView에서 작동합니다! 내 하루를 구해! 참고로 더 많은 UITextField가 있고 endEditing은 새 UITextField가 표시 되더라도 스크롤 위치가 잘못되기 때문에 [UIView endEditing :] 대신 [UITextField resignFirstResponder]를 사용합니다.
Dr.Luiji

1
UITapGestureRecognizer가 뷰에 추가되지 않기 때문에 잘못되었습니다!

1
여기서 cancelsTouchesInView의 목적은 무엇입니까?
Adam Johns

3
여기에 cancelsTouchesInView = false를 추가하지 않으면보기에서 다른 유형의 항목을 선택할 수 없습니다. 제스처 인식기가 탭을 가로 챌 것입니다.
HalR

104

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

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

또는

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

https://github.com/michaeltyson/TPKeyboardAvoiding


@Ramesh 네, 그렇습니다. 그러나 이런 식으로는 아닙니다. UITableView에서 서브 클래스를 작성하고 해당 클래스 내부에서 touchesBegan 메소드를 구현 한 후 endEditing 메소드를 호출해야합니다. 효과가있다! 새로 만든 클래스를 사용하여 펜촉의 테이블 클래스를 설정하는 것을 잊지 마십시오.
Prasad De Zoysa

3
사용자가보기에서 다른 컨트롤을 터치 할 때 키보드를 숨기지 않습니다. 예 : UIView에 UIButton 및 UITextField가 있습니다. UITextField를 누른 다음 버튼을 누르면 키보드가 숨겨지지 않습니다.
Jacob Dam

2
@JacobDam 당신이 맞아요. 목표는 경우 키보드를 숨길 resignfirstresponder이다 아무것도 aTextField 외부에서 발생합니다.

88

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

[tap setCancelsTouchesInView:NO];

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

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

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


3
또한을 사용하여보기 뒷면에 배경 이미지가있는 사람들을 UIImageView추가 [imageView setUserInteractionEnabled:NO];하고 추가 하고 "클릭"하면이 방법이 작동합니다.
Paul Peelen

55

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

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

1
감사! 이것은 저에게 효과적이며 다른 솔루션은 효과가 없었습니다. ( UITapGestureRecognizer보기 내부의 버튼을 두드리는 것을 방해했습니다). 응답자 체인에 혼란 touchesEnded이 있었기 때문에 작동하지 않았습니다 UIScrollView.)
jlstrecker

1
이것은 훌륭하게 작동하지만 키보드를 닫으려는 모든 것에 추가해야합니다. 텍스트 상자를 다른 사람에게 도청했을 때 자동 응답자를 자동으로 사임하는 방법이 있습니까?
Isaac Overacker

4
UIView를 UIControl로 만들 필요는 없습니다. UIView에 사용자 상호 작용이 사용 가능한지 확인하십시오.
Sofi Software LLC

1
@SofiSoftwareLLC 귀하의 제안이 저에게 효과적이지 않았습니다. User Interaction Enabled가 선택된 경우에도 UIControl로 만들어야했습니다.
3 컵

1
StoryBoard를 사용하여 UIView를 UIControl로 변경했습니다 (UIView 하위 클래스를 선택했을 것입니다). 잘 작동한다. 나는 어떤 문제도 겪지 않았습니다. iOS8.
ToddB

30

스위프트 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
    }
}

2
브로, 당신은 그것을 못 박았다! 이 답변은 완벽하고 정말 훌륭합니다. 대단히 감사합니다.

28

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

override func viewDidLoad() {
    super.viewDidLoad()

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

1
목표는 self오히려self.view
EI 선장 v2.0

1
대상은 self.view 여야합니다. 그렇지 않으면 위의 코드가 충돌합니다.
Naga Mallesh Maddali

canclesTouchesInView사용하기 편리한 속성입니다. 감사.
JonSlowCN

오래된 습관은 열심히 죽습니다. 그 세미콜론은 무엇입니까? ;)
Alexandre G.

@AlexandreG. 실제로, 나는 일반적으로 코딩하기 때문에 특히 c#. 참고 세미콜론은 구문이 허용되므로 꼭 필요한 것은 아닙니다.
Rob

17

어떻습니까 : 나는 이것이 오래된 게시물이라는 것을 알고 있습니다. 누군가를 도울 수 있습니다 :)

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
    NSArray *subviews = [self.view subviews];
    for (id objects in subviews) {
        if ([objects isKindOfClass:[UITextField class]]) {
            UITextField *theTextField = objects;
            if ([objects isFirstResponder]) {
                [theTextField resignFirstResponder];
            }
        } 
    }
}

UITextField를 확인하지 않았으므로 모든 입력 유형에서 작동합니다. 문제가 없습니다.
Frank

15

이것은 좋은 일반적인 해결책입니다.

목표 -C :

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];    
}

빠른:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.view.endEditing(true)
}

@icodebuster 솔루션을 기반으로 : https://stackoverflow.com/a/18756253/417652


12

스위프트 4 oneliner

view.addGestureRecognizer(UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing(_:))))

니스 코드, 그러나 이것은 비활성화 삭제 기능 (-)
schellingerht

너는 천재 야!
Abhishek Bedi

10

가장 쉬운 방법은 글로벌 뷰를 서브 클래스 화하고 hitTest:withEvent메서드를 사용 하여 모든 터치를 듣는 것입니다. 키보드의 터치는 등록되지 않았으므로 hitTest : withEvent는 다른 곳 을 터치 / 스크롤 / 스 와이프 / 핀치 할 때만 호출됩니다 [self endEditing:YES].

이것은 더 나은 사용하는 것보다 touchesBegan있기 때문에 touchesBegan당신이보기의 상단의 버튼을 클릭하면 호출되지 않습니다. UITapGestureRecognizer예를 들어 스크롤 동작을 인식 할 수없는 것보다 낫습니다 . 복잡하고 역동적 인 사용자 인터페이스에서는 어두운 화면을 어디에나 배치 할 수 없기 때문에 어두운 화면을 사용하는 것보다 낫습니다. 또한 다른 작업을 차단하지 않으므로 외부의 버튼을 선택하기 위해 두 번 탭할 필요가 없습니다 (와 같은 경우 UIPopover).

또한 [textField resignFirstResponder]화면에 많은 텍스트 필드가있을 수 있으므로를 호출하는 것보다 낫습니다 . 따라서 모든 필드에 적용됩니다.


불행히도, 이것은 텍스트를 지우기 위해 UISearchBar의 'X'를 방해하는 것 같습니다.
huggie

1
이 방법에는 몇 가지 문제가 있습니다. 예를 들어, 텍스트 필드에 초점을 잃지 않고 스크롤보기를 스크롤 할 수 없습니다. 더 복잡한 시나리오에는 권장되지 않습니다 ... 개인적으로, 나는 Dmitry의 uicontrol 버전을 선호합니다 .Sofi Software의 의견으로 확장 될 수 있습니다.
katzenhut

스크롤의 한 예는 이메일 앱에 있으며 검색 창에 입력 한 다음 메일 목록을 스크롤하면 키보드가 닫힙니다.
Enzo Tran

가장 좋은 접근 방식이며 다른 프로젝트에도 적용되었습니다.
찬드라 마니


6

뷰가 전혀 포함되어 있지 않으면 UIScrollView다음을 사용할 수 있습니다.

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

전자는 테이블보기가 스크롤 될 때 키보드 끄기 화면에 애니메이션을 표시하고 나중은 주식 메시지 앱처럼 키보드를 숨 깁니다.

iOS 7.0 이상에서 사용할 수 있습니다.


6

XCode 6 이상의 스토리 보드를 사용하여이 작업을 수행 할 수 있습니다.


키보드를 숨기는 동작 만들기

이것을 ViewController에서 사용하는 클래스의 헤더 파일에 추가하십시오.

@interface TimeDelayViewController : UIViewController <UITextFieldDelegate>

- (IBAction)dissmissKeyboardOnTap:(id)sender;

@end

그런 다음 동일한 ViewController의 구현 파일에 이것을 추가하십시오.

- (IBAction)dissmissKeyboardOnTap:(id)sender{
    [[self view]endEditing:YES];
}

이제 스토리 보드 장면 (예 : ViewController)에 대한 '수신 된 액션'중 하나가됩니다.

여기에 이미지 설명을 입력하십시오


액션을 사용자 이벤트에 연결

이제 키보드를 터치하는 사용자 동작에이 동작을 연결해야합니다.

중요-스토리 보드에 포함 된 'UIView'를 UIControl로 변환해야 이벤트를 수신 할 수 있습니다. View Controller 장면 계층에서보기를 선택하십시오.

여기에 이미지 설명을 입력하십시오

... 그리고 클래스를 변경하십시오 :

여기에 이미지 설명을 입력하십시오

이제 장면의 '수신 된 액션'옆에있는 작은 원에서 장면의 '빈'부분으로 드래그하십시오 (실제로 '수신 된 액션'을 UIControl로 드래그합니다). 다음과 같은 작업을 수행 할 수있는 다양한 이벤트가 표시됩니다.

여기에 이미지 설명을 입력하십시오

'내부 터치'옵션을 선택하십시오. 이제 생성 한 IBAction을 키보드를 터치하는 사용자 동작에 연결했습니다. 사용자가 키보드를 탭하면 키보드가 숨겨집니다.

참고 : 액션을 이벤트에 연결하려면 수신 된 액션에서 View Controllers 계층의 UIControl로 직접 드래그 할 수도 있습니다. 계층에서 'Control'로 표시됩니다.


해결책과 자세한 설명에 감사드립니다. 정말 도움이되었습니다.
Yongxiang Ruan

5

내가 당신을 바로 잡았다면 당신은 out of Side를 두드리는 키보드 wile을 사임하고 textfield싶지만 당신은의 참조가 없습니다 textfield.

이 시도;

  • 전역 textField를 가져 와서 호출 reftextField
  • 이제 textFieldDidBeginEditing참조 텍스트 필드를

    - (void) textFieldDidBeginEditing:(UITextField *)textField{
        reftextField = textField;
    }
  • 이제 모든 버튼 시계에서 즐겁게 사용할 수 있습니다 (투명한 버튼을 추가하면 편집을 시작하십시오)

    - (void)dismissKeyboard {
          [reftextField resignFirstResponder];
    }
  • 또는 완료 버튼을 사임하려면 이것을 시도하십시오.

    //for resigning on done button    
    - (BOOL) textFieldShouldReturn:(UITextField *)textField{
        [textField resignFirstResponder];
        return YES;
    }

3

외부 목록에서 키보드를 해제하는 방법에 대한 내 버전을 여기 목록에 추가하십시오.

viewDidLoad :

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleTap];

어딘가에:

-(void)handleSingleTap:(UITapGestureRecognizer *)sender{
    [textFieldName resignFirstResponder];
    puts("Dismissed the keyboard");
}

3

여기에 사용에 대한 큰 응답의 많음 UITapGestureRecognizer휴식의 --all UITextField의 '클리어 (X) 버튼을 누릅니다. 해결책은 델리게이트를 통해 제스처 인식기를 억제하는 것입니다.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    BOOL touchViewIsButton = [touch.view isKindOfClass:[UIButton class]];
    BOOL touchSuperviewIsTextField = [[touch.view superview] isKindOfClass:[UITextField class]];
    return !(touchViewIsButton && touchSuperviewIsTextField);
}

가장 강력한 솔루션은 아니지만 저에게 효과적입니다.


정확히 같은 텍스트 필드를 탭하면 위의 모든 것이 실패합니다. 텍스트 필드조차도 내 응답자입니다. 또한 textField
Mrug

버튼에 대한 테스트를 수행하여 단순화합니다 return !touchViewIsButton. 키보드를 해제 해야하는 다른 버튼은 해당 작업을 수행해야한다고 생각합니다. 또한 키보드 해제에서 레이아웃이 변경 될 때 TouchUpInside가 호출되지 않을 수 있습니다.
Marián Černý 2016 년

3

UiView에 대한 카테고리를 작성하고 다음과 같이 touchesBegan meathod를 대체 할 수 있습니다.

그것은 나를 위해 잘 작동하고 있으며이 문제에 대한 중앙 집중식 솔루션입니다.

#import "UIView+Keyboard.h"
@implementation UIView(Keyboard)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.window endEditing:true];
    [super touchesBegan:touches withEvent:event];
}
@end

3

@ Jensen2k의 답변의 신속한 버전 :

let gestureRecognizer : UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: "dismissKeyboard")
self.view.addGestureRecognizer(gestureRecognizer)

func dismissKeyboard() {
    aTextField.resignFirstResponder()
}

짧막 한 농담

self.view.addTapGesture(UITapGestureRecognizer.init(target: self, action: "endEditing:"))

2

새로운 개발에 Barry 예제를 사용했습니다. 잘 작동했습니다! 그러나 편집중인 텍스트 필드에 대해서만 키보드를 해제 해야하는 약간의 변경 사항이 포함되어야했습니다.

그래서 Barry 예제에 다음을 추가했습니다.

- (void) textFieldDidBeginEditing:(UITextField *)textField
{
    _textBeingEdited = textField;
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{
    _textBeingEdited = nil;
}

또한 hideKeyboard 방법을 다음과 같이 변경했습니다.

- (IBAction)hideKeyboard:(id)sender
{
    // Just call resignFirstResponder on all UITextFields and UITextViews in this VC
    // Why? Because it works and checking which one was last active gets messy.
    //UITextField * tf = (UITextField *) sender;
    [_textBeingEdited resignFirstResponder];
}

2

가장 쉽고 짧은 방법 중 하나는이 코드를 viewDidLoad

[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc]
                                     initWithTarget:self.view
                                     action:@selector(endEditing:)]];

2
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

    if let touch = touches.first{
     view.endEditing(true)

     }
}

2

나는 여기에서 많은 반응을 시도했지만 운이 없었습니다. 탭 동작 인식기를 UIButtons탭해도 탭 제스처 인식기가 항상 응답하지 않습니다.cancelsTouchesInView 속성을 NO로 .

이것이 결국 문제를 해결 한 것입니다.

ivar이 있으십시오 :

UITapGestureRecognizer *_keyboardDismissGestureRecognizer;

텍스트 필드가 편집을 시작하면 동작 인식기를 설정하십시오.

- (void) textFieldDidBeginEditing:(UITextField *)textField
{
    if(_keyboardDismissGestureRecognizer == nil)
    {
        _keyboardDismissGestureRecognizer = [[[UITapGestureRecognizer alloc]
                                       initWithTarget:self
                                       action:@selector(dismissKeyboard)] autorelease];
        _keyboardDismissGestureRecognizer.cancelsTouchesInView = NO;

        [self.view addGestureRecognizer:_keyboardDismissGestureRecognizer];
    }
}

그런 다음 방법을 설정하는 방법에 대한 요령이 있습니다 dismissKeyboard.

- (void) dismissKeyboard
{
    [self performSelector:@selector(dismissKeyboardSelector) withObject:nil afterDelay:0.01];
}

- (void) dismissKeyboardSelector
{
    [self.view endEditing:YES];

    [self.view removeGestureRecognizer:_keyboardDismissGestureRecognizer];
    _keyboardDismissGestureRecognizer = nil;
}

dismissKeyboardSelector터치 처리 실행 스택 에서 실행을 얻는 것과 관련하여 뭔가가 있다고 생각합니다 ...



1

이 작동합니다

이 예제에서 aTextField는 유일한 UITextField입니다 .... 다른 또는 UITextView가 있으면 조금 더해야 할 일이 있습니다.

// YourViewController.h
// ...
@interface YourViewController : UIViewController /* some subclass of UIViewController */ <UITextFieldDelegate> // <-- add this protocol
// ...
@end

// YourViewController.m

@interface YourViewController ()
@property (nonatomic, strong, readonly) UITapGestureRecognizer *singleTapRecognizer;
@end
// ...

@implementation
@synthesize singleTapRecognizer = _singleTapRecognizer;
// ...

- (void)viewDidLoad
{
    [super viewDidLoad];
    // your other init code here
    [self.view addGestureRecognizer:self.singleTapRecognizer];

{

- (UITapGestureRecognizer *)singleTapRecognizer
{
    if (nil == _singleTapRecognizer) {
        _singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapToDismissKeyboard:)];
        _singleTapRecognizer.cancelsTouchesInView = NO; // absolutely required, otherwise "tap" eats events.
    }
    return _singleTapRecognizer;
}

// Something inside this VC's view was tapped (except the navbar/toolbar)
- (void)singleTapToDismissKeyboard:(UITapGestureRecognizer *)sender
{
    NSLog(@"singleTap");
    [self hideKeyboard:sender];
}

// When the "Return" key is pressed on the on-screen keyboard, hide the keyboard.
// for protocol UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField*)textField
{
    NSLog(@"Return pressed");
    [self hideKeyboard:textField];
    return YES;
}

- (IBAction)hideKeyboard:(id)sender
{
    // Just call resignFirstResponder on all UITextFields and UITextViews in this VC
    // Why? Because it works and checking which one was last active gets messy.
    [aTextField resignFirstResponder];
    NSLog(@"keyboard hidden");
}

1
- (void)viewDidLoad
{
    [super viewDidLoad]; 

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                          initWithTarget:self
                                                          action:@selector(handleSingleTap:)];
    [singleTapGestureRecognizer setNumberOfTapsRequired:1];
    [singleTapGestureRecognizer requireGestureRecognizerToFail:singleTapGestureRecognizer];

    [self.view addGestureRecognizer:singleTapGestureRecognizer];
}

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer
{
    [self.view endEditing:YES];
    [textField resignFirstResponder];
    [scrollView setContentOffset:CGPointMake(0, -40) animated:YES];

}

1

이 코드를 ViewController.m 파일 에 추가 하십시오.

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}

1

이 경우, 사용이있을 수 있는 ScrollView 및 추가 TextField있는 ScrollView와 난을 눌러 원하는 ScrollView및보기 다음 키보드를 해제. 만약을 대비하여 샘플 코드를 만들려고했습니다. 이렇게

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.tap(_:)))
        view.addGestureRecognizer(tapGesture)
        // Do any additional setup after loading the view, typically from a nib.
    }
    func tap(gesture: UITapGestureRecognizer) {
        textField.resignFirstResponder()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

당신의 스토리 보드는 저것처럼 봅니다.

여기에 이미지 설명을 입력하십시오


1

UITextField 외부를 클릭하여 키보드를 닫는 데 UITapGestureRecongnizer 메소드를 사용할 수 있습니다. 사용자가 UITextField 외부를 클릭 할 때마다이 방법을 사용하면 키보드가 해제됩니다. 아래는이를 사용하기위한 코드 스 니펫입니다.

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

    [self.view addGestureRecognizer:tap];


//Method
- (void) dismissk
{
    [abctextfield resignFirstResponder];
    [deftextfield resignFirstResponder];

}

1
  • 뷰에서 텍스트 필드 위임 설정이로드되었습니다.

    override func viewDidLoad() 
    {
      super.viewDidLoad()
      self.userText.delegate = self
    }
  • 이 기능을 추가하십시오 :

    func textFieldShouldReturn(userText: UITextField!) -> Bool 
    {
     userText.resignFirstResponder()
     return true;
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.