키보드를 해제하는 쉬운 방법?


376

내 테이블의 많은 테이블 셀에 상당히 많은 컨트롤이 흩어져 있으며 모든 컨트롤을 반복하고 첫 번째 응답자로 모두 사임하지 않고 키보드를 해제하는 더 쉬운 방법이 있는지 궁금합니다. 질문은 .. 키보드의 현재 첫 번째 응답자를 어떻게 얻습니까?


이 질문에 좋은 보완 stackoverflow.com/questions/1490573/...
ericsoco

아래의 모든 답변에주의하십시오. KB를 사임 한 직후에 segue를 수행하면 KB가 고아가되어 해제 할 수 없습니다. textFieldShouldReturn 메소드에서 KB를 해제해야합니다.
gjpc

26
글로벌 키보드 해고 올바른 방법 :[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
Yerk

이 비디오가 pinkstone.co.uk/… 도움이 되었다는 것을 알았습니다 . 다른 사람들을 도울 수 있습니다.
enthusiasticgeek

답변:


796

시험:

[self.view endEditing:YES];

1
이것은 작동하는 것 같습니다 (ios4.1에서 테스트 됨). iOS 3.2 이상에서만 사용할 수 있습니다. 이것이 실제로 작동하는지 확실하지 않거나 API가 작동하도록 문서화되지 않은 방식으로 호출하면 보장되지 않는 부작용 일뿐입니다.
JosephH

3
이것은 나를 위해 완벽하게 작동 했으며이 질문에 대한 다른 대답보다 확실히 바람직합니다. 문서는 iOS 2.0 이상에서 사용할 수 있다고 말합니다.
antsyawn

8
문서가 말하기를 : . 그것이 하나를 발견하면 "이 현재보기에서 방법의 외모와 현재 첫 번째로 반응입니다 텍스트 필드에 대한 하위 뷰 계층 구조, 먼저 응답 사임하는 텍스트 필드를 묻는 힘 매개 변수가 세트 인 경우. "예, 텍스트 필드는 절대 묻지 않으며 사임해야합니다." -이것은 원래의 질문에 대한 정답 IMO입니다 (사용 사례 : 수백만 개의 필드가있는 양식이 있습니다-10 ... 정도면 키보드를 해제해야합니다).
joshis

14
대답은 틀린 것이 아니지만 약간 틀린 것입니다. 실제로 [self.view endEditing:YES];Objective-C에서 BOOL 값이 YES / NO이므로
chrisben

24
chrisben : YES / NO, TRUE / FALSE, 0/1을 사용할 수 있습니다.
Michael Superczynski

126

현재 편집중인보기가 첫 번째 응답자 상태를로 사임하도록 강제 할 수 있습니다 [view endEditing:YES]. 키보드가 숨겨집니다.

달리 -[UIResponder resignFirstResponder], -[UIView endEditing:]현재 첫 번째로 반응을 찾아 파단 통해 검색합니다. 따라서 최상위 뷰 (예 :) self.view로 전송할 UIViewController수 있으며 올바른 작업을 수행합니다.

(이 답변에는 이전에 작동했지만 필요한 것보다 더 복잡한 몇 가지 다른 솔루션이 포함되어 있습니다. 혼란을 피하기 위해 제거했습니다.)


그러나 이것은 구성 요소가 firstResponder가되는 것을 차단하고 요소에서 현재 firstResponder 상태를 제거하지는 않습니다.
Kendall Helmstetter Gelner

내가 firstFirstResponder를 재정 의하여 의미하는 것은 첫 번째 응답자를 어딘가에 저장하므로 나중에 액세스 할 수 있습니다 (이 경우 사임). 기본적인 문제는 Cocoa Touch가 창을 요청하거나 첫 번째 응답자가 무엇인지 볼 수있는 방법을 제공하지 않는다는 것입니다.
Nicholas Riley

+1 becomeFirstResponder를 추가하면 다른 UITextField를 탭할 때 발생하는 문제가 해결되었습니다.
Jason George

3
이것은 더 이상 사용되지 않습니다. [self.view endEditing:YES];대답은 더 좋다.
ftvs 2016 년

1
이것은 더 이상 사용되지 않으며이 답변 [UIView endediting:]은 작동 방식을 정확하게 설명 합니다. 애플 리케이션 중 하나에서 나는 그냥 호출하면 검색 상자가 UINavigationViewController에 첨가 개발 한 [self.view endEditing:YES]대로, self나는, 검색 상자가 추가 된 뷰 범위에서 직접이 방법이라고 예를 들어, 대신,보기 컨트롤러이하지 않습니다 일 : [self.mySearchBoxView endEditing:YES].
Jan Cássio

92

응용 프로그램에 대상이 지정되지 않은 작업을 보낼 수 있으며, 현재 첫 번째 응답자 상태를 가진 뷰에 대해 걱정할 필요없이 언제든지 첫 번째 응답자를 사임합니다.

목표 -C :

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];

스위프트 3.0 :

UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)

Mac OS X에서는 메뉴 명령으로 대상이 지정되지 않은 작업이 일반적이며, iOS에서 해당 작업이 사용됩니다.


14
전체 페이지의 최상의 솔루션.
레오 나탄

iOS 앱의 어느 곳에서나 키보드를 제거하는 가장 좋은 방법입니다.
Ben Sinclair

여전히 iOS8에서 작동합니다. 내 응용 프로그램에는 사이드 바 메뉴가 있으며 "중앙"보기 컨트롤러에 키보드가 표시되는 경우가 있습니다. 사이드 바 메뉴가 표시되면 키보드를 닫고 싶습니다. 그래서이 코드를 사이드 바 메뉴 클래스의 viewWillAppear 메소드에 추가했습니다.
Jenn Eve

1
여전히 iOS 9에서 작동합니다. 텍스트 필드의 포커스를 전 세계적으로 사임하고 키보드를 해제하는 좋은 방법입니다.
bmjohns

그리고이 특정 주석 행진을 계속하려면 .... 여전히 iOS 10에서 작동합니다. :-)
Traveling Man

56

솔직히 말해서, 여기에 제안 된 솔루션에 대해서는 미치지 않습니다. TapGestureRecognizer를 사용하여 문제의 핵심이라고 생각하는 좋은 방법을 찾았습니다. 키보드 이외의 것을 클릭하면 키보드를 닫습니다.

  1. viewDidLoad에서 키보드 알림을 수신하고 UITapGestureRecognizer를 작성하도록 등록하십시오.

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    
    [nc addObserver:self selector:@selector(keyboardWillShow:) name:
    UIKeyboardWillShowNotification object:nil];
    
    [nc addObserver:self selector:@selector(keyboardWillHide:) name:
    UIKeyboardWillHideNotification object:nil];
    
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
    action:@selector(didTapAnywhere:)];
  2. 키보드 표시 / 숨기기 응답자를 추가하십시오. 여기에서 TapGestureRecognizer를 UIView에 추가하고 제거하면 탭할 때 키보드가 사라집니다. 참고 : 모든 하위 뷰 또는 컨트롤에 추가 할 필요는 없습니다.

    -(void) keyboardWillShow:(NSNotification *) note {
        [self.view addGestureRecognizer:tapRecognizer];
    }
    
    -(void) keyboardWillHide:(NSNotification *) note
    {
        [self.view removeGestureRecognizer:tapRecognizer];
    }
  3. TapGestureRecognizer는 탭을 받으면 함수를 호출하며 다음과 같이 키보드를 닫을 수 있습니다.

    -(void)didTapAnywhere: (UITapGestureRecognizer*) recognizer {    
        [textField resignFirstResponder];
    }

이 솔루션의 좋은 점은 스 와이프하지 않고 탭만 필터링한다는 것입니다. 따라서 키보드 위에서 내용을 스크롤하면 스 와이프해도 여전히 스크롤되어 키보드가 표시된 상태로 유지됩니다. 키보드가 사라진 후 제스처 인식기를 제거하면 나중에보기의 탭이 정상적으로 처리됩니다.


내 @implementation에 @property (할당) UITapGestureRecognizer * tapRecognizer를 추가했습니다. 수정 된 self.tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget : self action : @selector (didTapAnywhere :)];
Todd 교수

비슷한 일을하려고하는데 콜백이 발생하지 않습니다. 호기심 : 왜 당신의 재산이 '지정'입니까?
TahoeWolverine

게다가 하나, 그리고 이것이 기본 iOS 동작이어야합니다. 또는 적어도 해제 버튼을 토글하는 간단한 방법을 추가하십시오.
Shaunti Fondrisi

24

이것은 칠 때 키보드가 사라지도록하는 솔루션 return입니다한 곳에서 코드를 추가하여 모든 텍스트 필드 치울 (따라서 각 텍스트 필드에 핸들러를 추가하지 않아도 됨).


이 시나리오를 고려하십시오.

나는 viewcontroller 두 텍스트 필드 (사용자 이름 및 암호)와 함께합니다. 그리고 viewcontroller구현의 UITextFieldDelegate프로토콜

viewDidLoad 에서이 작업을 수행합니다.

- (void)viewDidLoad 
{
    [super viewDidLoad];

    username.delegate = self;
    password.delegate = self;
}

뷰 컨트롤러는 다음과 같은 선택적 방법을 구현합니다.

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

내가 타 자마자 텍스트 필드에 관계없이 return 키보드 사라집니다!

귀하의 경우 모든 텍스트 필드의 대리자를 self로 설정하고 구현하는 한 동일하게 작동합니다. textFieldShouldReturn


글쎄, 나는 이미 문제가 해결되었지만 내 경우에는 키보드를 직접 (코드로) 닫고 싶었고 어떤 textField가 첫 번째 응답자 상태인지 알지 못했습니다.
Seventoes

1
사이드 바 메뉴가 표시 될 때와 같이 "반환"을 누르지 않고 키보드를 닫고 싶을 수도 있습니다.
Peter Johnson

이 답변은 "반환"을 누르는 것이 적합한 솔루션 인 경우 에만 관련 이 있음을 명확히하기 위해 편집되었습니다 . [제 경우에는 사용자가 편집중인 필드 외부를 누를 때 키보드를 닫고 싶었습니다. 이 답변은 도움이되지 않습니다.]
ToolmakerSteve

14

더 나은 접근 방식은 무언가 "훔친"첫 번째 응답자 상태를 유지하는 것입니다.

UIApplication은 UIResponder의 서브 클래스이므로 다음을 시도 할 수 있습니다.

[[UIApplication sharedApplication] becomeFirstResponder]
[[UIApplication sharedApplication] resignFirstResponder]

실패하면 크기가 0 인 프레임으로 새 UITextField를 만들고 어딘가에 뷰에 추가하고 비슷한 것을 수행하십시오 (사임이 됨).


1
UIApplication 트릭은 작동하지 않지만 (최소한 시뮬레이터에서는 충돌 함) 크기가 0 인 UITextField가 필요하지 않습니다. 임의의 필드를 선택 하고이 작업을 수행하십시오. NSResponder의 doesFirstResponder는 알림 전용 방법이지만 UIResponder는 그렇지 않습니다 (실제로는 디자인이 더 나쁩니다).
Nicholas Riley

1
아하, 고마워! UIApplication에서 호출하면 충돌하지만 크기가 0 인 UITextField는 훌륭하게 작동하며 이전 필드를 검색 할 필요가 없습니다.
Seventoes 2009

공식적이고 완벽하며 문서화 된 방법이 있다면 왜 누군가가 이것을 할 것입니까?
Maciej Swic

2
그들은 더 나은 해결책을 위해 가장 많이 대답 한 답변을 보지 않을 것입니다. 당시에는 잘 알려지지 않았습니다 (제 답변은 2009 년, 다른 답변은 1 년 후 2010 년에 나왔습니다). 그러나 나는 후손을 위해 그것을 둡니다.
Kendall Helmstetter Gelner

8

유틸리티 클래스에서 이것을 제거하십시오.

+ (void)dismissKeyboard {
    [self globalResignFirstResponder];
}

+ (void) globalResignFirstResponder {
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    for (UIView * view in [window subviews]){
        [self globalResignFirstResponderRec:view];
    }
}

+ (void) globalResignFirstResponderRec:(UIView*) view {
    if ([view respondsToSelector:@selector(resignFirstResponder)]){
        [view resignFirstResponder];
    }
    for (UIView * subview in [view subviews]){
        [self globalResignFirstResponderRec:subview];
    }
}

1
이것이 내가 찾던 것입니다!
aslisabanci

globalResignFirstResponderRec 메소드가 전혀 필요하지 않다는 점을 제외하고는 [view endEditing : YES]를 대신 호출하면됩니다. 같은 일을합니다.
n13

네! 최종 솔루션! 나는 여러 가지 방법을 시도했지만 이것 만이 나를 위해 작동합니다! 대단히 감사합니다!
douyw

6

@Nicholas Riley & @Kendall Helmstetter Geln & @cannyboy :

절대적으로 훌륭합니다!

감사합니다.

이 스레드에서 당신의 조언과 다른 사람들의 조언을 고려할 때, 이것은 내가 한 일입니다.

사용될 때의 모습 :

[[self appDelegate] dismissKeyboard]; (참고 : appDelegate를 NSObject에 추가하여 어디서나 사용할 수 있습니다)

후드 아래의 모습 :

- (void)dismissKeyboard 
{
    UITextField *tempTextField = [[[UITextField alloc] initWithFrame:CGRectZero] autorelease];
    tempTextField.enabled = NO;
    [myRootViewController.view addSubview:tempTextField];
    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];
}

편집하다

에 대한 내 답변 수정 tempTextField.enabled = NO;. 텍스트 필드를 사용 중지하면 앱 전체에서이 알림에 의존하는 경우 키보드 알림이 전송 되지 UIKeyboardWillShowNotification않고 차단 UIKeyboardWillHideNotification됩니다.


그것이 작동하는지 모르겠지만 똑똑하고 쉬운 방법 같습니다.
demon

5

사용자가 UITextField 또는 키보드 외부 화면의 아무 곳이나 터치 할 때 iOS에서 키보드를 해제하는 방법에 대한 빠른 팁. iOS 키보드가 차지할 수있는 공간을 고려할 때 사용자가 키보드를 해제 할 수있는 쉽고 직관적 인 방법을 사용하는 것이 좋습니다.

여기 링크가 있습니다


큰! AppDelegate에 추가하면 모든 관련 뷰에서 작동합니다.
Jiulong Zhao

5

iOS 문서에서 찾기가 쉽지 않기 때문에 여기에 지나치게 복잡한 답변이 많이 있습니다. JosephH는 바로 위에있었습니다.

[[view window] endEditing:YES];

4

Meagar의 답변보다 훨씬 간단

덮어 쓰기 touchesBegan:withEvent:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [textField resignFirstResponder];`
}

이 중 dismiss the keyboard아무 곳이나 터치하면됩니다 background.


3

내 코드에서 사용하는 내용은 다음과 같습니다. 그것은 매력처럼 작동합니다!

yourviewcontroller.h에서 다음을 추가하십시오.

@property (nonatomic) UITapGestureRecognizer *tapRecognizer;

이제 .m 파일에서 이것을 ViewDidLoad 함수에 추가하십시오.

- (void)viewDidLoad {
    //Keyboard stuff
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAnywhere:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];
}

또한이 기능을 .m 파일에 추가하십시오.

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

감사! 그러나 함수의 이름을 'didTapAnywhere'로 바꾸거나 제스처 인식기를 'handleSingleTap'으로 바꿉니다. ;-)
Matthijs

2

뷰 컨트롤러의 헤더 파일 <UITextFieldDelegate>에서 UITextField 델리게이트 프로토콜을 준수하도록 컨트롤러 인터페이스의 정의에 추가 하십시오 ...

@interface someViewController : UIViewController <UITextFieldDelegate>

... 컨트롤러의 구현 파일 (.m)에서 다음 메소드를 추가하거나 viewDidLoad 메소드가 이미있는 경우 그 내부의 코드를 추가하십시오.

- (void)viewDidLoad
{
    // Do any additional setup after loading the view, typically from a nib.
    self.yourTextBox.delegate = self;
}

... 그런 다음 yourTextBox를 실제 텍스트 필드에 연결하십시오.

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField 
{
    if (theTextField == yourTextBox) {
        [theTextField resignFirstResponder];
    }
    return YES;
}

2

endEditing:하위 클래스 인 작업 창으로 보내야 합니다.UIView

[[UIApplication sharedApplication].windows.firstObject endEditing:NO];

대신 YES를 의미한다고 생각합니다.
Matrosov Alexander

2

UITableView 및 UIScrollView에서 키보드를 해제하는 가장 좋은 방법은 다음과 같습니다.

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag

2

신속한 3에서는 다음을 수행 할 수 있습니다

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)

1

Jeremy의 답변이 저에게 효과적이지 않았습니다. 모달 대화 상자가있는 탭보기에 탐색 스택이 있었기 때문에 생각합니다. 나는 지금 다음을 사용하고 있으며 나를 위해 일하고 있지만 마일리지는 다를 수 있습니다.

 // dismiss keyboard (mostly macro)
[[UIApplication sharedApplication].delegate dismissKeyboard]; // call this in your to app dismiss the keybaord

// --- dismiss keyboard (in indexAppDelegate.h) (mostly macro)
- (void)dismissKeyboard;

// --- dismiss keyboard (in indexAppDelegate.m) (mostly macro)
// do this from anywhere to dismiss the keybard
- (void)dismissKeyboard {    // from: http://stackoverflow.com/questions/741185/easy-way-to-dismiss-keyboard

    UITextField *tempTextField = [[UITextField alloc] initWithFrame:CGRectZero];

    UIViewController *myRootViewController = <#viewController#>; // for simple apps (INPUT: viewController is whatever your root controller is called.  Probably is a way to determine this progragrammatically)
    UIViewController *uivc;
    if (myRootViewController.navigationController != nil) { // for when there is a nav stack
        uivc = myRootViewController.navigationController;
    } else {
        uivc = myRootViewController;
    }

    if (uivc.modalViewController != nil) { // for when there is something modal
        uivc = uivc.modalViewController;
    } 

    [uivc.view  addSubview:tempTextField];

    [tempTextField becomeFirstResponder];
    [tempTextField resignFirstResponder];
    [tempTextField removeFromSuperview];
    [tempTextField release];

}

흠-왜 투표하지? 테스트 된 코드로 다른 답변으로 특정 실제 단점을 해결했습니다. 나는 투표권이 부족하다는 것을 이해할 수 있지만, 부정적인 영역에 투표하는 것은 정말 실망입니다. 위의 답변이 다른 사람에게 도움이되기를 바랍니다.
JJ Rohrer

1

경우에 따라 UIViewController disablesAutomaticKeyboardDismissal을 재정의해야 할 수도 있습니다. UINavigationController가있는 경우이를 수행해야합니다.


1

텍스트 필드 서브 클래스 및 텍스트 뷰

서브 클래스 에서이 코드를 넣으십시오.

-(void)conformsToKeyboardDismissNotification{

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissKeyBoard) name:KEYBOARD_DISMISS object:nil];
}

-(void)deConformsToKeyboardDismissNotification{

    [[NSNotificationCenter defaultCenter] removeObserver:self name:KEYBOARD_DISMISS object:nil];
}

- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [self resignFirstResponder];
}

텍스트 필드 델리게이트에서 (텍스트 뷰 델리게이트와 유사)

-(void)textFieldDidBeginEditing:(JCPTextField *)textField{
     [textField conformsToKeyboardDismissNotification];
}


- (void)textFieldDidEndEditing:(JCPTextField *)textField{
    [textField deConformsToKeyboardDismissNotification];
}

모든 설정 .. 이제 코드의 어느 곳에서나 알림을 게시하십시오. 모든 키보드를 사임합니다.


1

그리고 신속하게 우리는 할 수 있습니다

UIApplication.sharedApplication().sendAction("resignFirstResponder", to: nil, from: nil, forEvent: nil)

첫 번째 응답자가 어떻게 작동하는지 이해할 수 없습니다. 이것을 어디에 두어야합니까? 내 뷰 컨트롤러 또는 위임에서?
Shayan C

중요하지 않습니다. 당신이 원하는 곳이면 어디든 넣을 수 있습니다. 버튼 동작
Eike

1

키보드가 나타난 후 키보드를 닫으려면 2 가지 경우가 있습니다 .

  1. UITextField가 UIScrollView 안에 있을 때

  2. UITextField가 UIScrollView 외부에 있을 때

2. UITextField가 UIScrollView 외부에있을 때 UIViewController 서브 클래스의 메소드를 대체하십시오.

모든 UITextView에 대리자를 추가 해야합니다.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];
}
  1. A의 스크롤 뷰, 태핑 외부의 어떤 이벤트가 발생하지 않습니다 그래서이 경우, 탭 제스처 인식기 사용 , 드래그 앤 드롭 UITapGesture 스크롤 뷰를하고 그것을 위해 IBAction를를 작성 .

IBAction을 만들려면 ctrl +를 누르고 UITapGesture를 클릭하고 viewcontroller의 .h 파일로 끕니다.

여기에서 tappedEvent를 내 액션 이름으로 지정했습니다.

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

주어진 abouve는 다음 링크에서 파생되었습니다. abouve 데이터를 이해하지 못하는 경우 자세한 정보를 참조하거나 저에게 연락하십시오.

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/


0

개인 API 호출을 사용하지 않고 프로그래밍 방식으로 키보드를 해제하는 "전역"방법이 없다는 점이 싫습니다. 종종 어떤 객체가 첫 번째 응답자인지 알지 못하고 프로그래밍 방식으로 키보드를 해제해야 할 필요가 있습니다. selfObjective-C 런타임 API를 사용하여 검사하고 모든 속성을 열거하고 유형의 속성을 가져 와서 UITextField전송합니다.resignFirstResponder 메시지를 .

이렇게하기가 어렵지 않아야합니다 ...


0

예쁘지는 않지만 응답자가 무엇인지 모르는 경우 firstResponder를 사임하는 방법은 다음과 같습니다.

IB 또는 프로그래밍 방식으로 UITextField를 만듭니다. 그것을 숨기십시오. IB에서 작성한 경우 코드에 연결하십시오. 그런 다음 키보드를 닫으려면 응답자를 보이지 않는 텍스트 필드로 전환하고 즉시 서명을 취소하십시오.

  [self.invisibleField becomeFirstResponder];
  [self.invisibleField resignFirstResponder];

0

하위 뷰를 반복적으로 반복하고 모든 UITextField의 배열을 저장 한 다음 반복하여 사임 할 수 있습니다.

특히 훌륭한 서브 뷰가있는 경우에는 훌륭한 솔루션은 아니지만 간단한 앱의 경우 트릭을 수행해야합니다.

나는 이것을 훨씬 더 복잡하지만 성능이 더 좋은 방법으로 해결했지만 내 응용 프로그램의 애니메이션 엔진에 싱글 톤 / 관리자를 사용하고 텍스트 필드가 응답자가 될 때마다 정적 인 할당을 할당 할 것입니다. 다른 특정 사건에 근거하여 휩쓸려 (사임) ... 단락에서 설명하기가 거의 불가능합니다.

창의력을 발휘하십시오.이 질문을 찾은 후 내 앱에 대해 생각하는 데 10 분 밖에 걸리지 않았습니다.


이 달 전에 해결되었습니다;) 나는 활성 필드를 초점에 저장하고 사용했습니다.
Seventoes

0

최근에 사용해야했던 약간 더 강력한 방법 :

- (void) dismissKeyboard {
    NSArray *windows = [UIApplication sharedApplication].windows;

    for(UIWindow *window in windows) [window endEditing:true];

    //  Or if you're only working with one UIWindow:

    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

다른 "전역"방법 중 일부가 작동하지 않는 것을 발견했습니다 (예 : UIWebView& WKWebView사임 거부).


0

보기에 Tap Gesture Recognizer를 추가하고 ibaction을 정의하십시오

.m 파일은

    - (IBAction)hideKeyboardGesture:(id)sender {
    NSArray *windows = [UIApplication sharedApplication].windows;
    for(UIWindow *window in windows) [window endEditing:true];
    [[UIApplication sharedApplication].keyWindow endEditing:true];
}

그것은 나를 위해 일했다


0

예, endEditing이 가장 좋습니다. iOW 7.0부터는 UIScrollView스크롤보기와 상호 작용할 때 키보드를 닫는 멋진 기능이 있습니다. 이를 위해의 keyboardDismissMode속성을 설정할 수 있습니다 UIScrollView.

키보드 해제 모드를 다음과 같이 설정하십시오.

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag

다른 유형은 거의 없습니다. 이 사과 문서를 살펴보십시오 .



0

쉬운 방법은 메소드를 호출하는 것입니다

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if(![txtfld resignFirstResponder])
    {
        [txtfld resignFirstResponder];
    }
    else
    {

    }
    [super touchesBegan:touches withEvent:event];
}

'if'가 필요하지 않으면 resignFirstResponder가 어쨌든 할 것입니다. 어쩌면 당신은-(BOOL) canResignFirstResponder를 의미합니까?
Seventoes

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.