UITextField에서 Return 키를 누를 때 키보드를 숨기는 방법은 무엇입니까?


148

텍스트 필드를 클릭하면 키보드가 나타납니다. 사용자가 Return 키를 누를 때 숨기려면 어떻게합니까?


13
스택 오버플로의 좋은 점은 많은 질문, 특히 간단한 질문에 이미 답변되어 있다는 것입니다. 따라서 질문하기 전에 먼저 답변을 찾으십시오. 간단합니다 : stackoverflow.com/search?q=iphone+hide+keyboard
Felixyz

이 동적으로 텍스트 / 문자열 조건에 따라 UIReturnKey을 변경하는 것이의 UITextField의 서브 클래스입니다 github.com/codeinteractiveapps/OBReturnKeyTextField
CodeInteractive

답변:


286

먼저 UITextField의 파일 대리자를 만듭니다.

@interface MYLoginViewController () <UITextFieldDelegate>

@end

그런 다음이 메소드를 코드에 추가하십시오.

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

또한 추가 self.textField.delegate = self;


1
궁금합니다. <UITextFieldDelegate>가 왜 필요하지 않습니까? 이 경우 일반적으로 경고가 표시됩니다.
pixelfreak

7
Interface Builder를 사용하여 파일을 위임하면 .h 파일에 <UITextFieldDelegate>가 필요하지 않습니다.
Saurabh

1
.h 파일에 <UITextFieldDelegate>를 추가하고 viewdidload에서 델리게이트 설정 [yourTextField setDelegate : self]; 그것을 완료 할 것입니다!
Umit Kaya

@Saurabh 스토리 보드로 만든 VC의 특별한 점은 무엇입니까?
Paul Brewczynski

62

에서 viewDidLoad선언 :

[yourTextField setDelegate:self];

그런 다음 delegate 메소드의 대체를 포함하십시오.

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

6
setDelegate:알림 +1 확실히 잊어 버렸고 코드는 이전에 작동하지 않았습니다.
piperchester

2
전달되는 yourTextField가 아닌 textField가 아니어야합니까?
Clive Jefferies

귀하의 textField의 대리인을 선언하는 방법입니다
oscar castellon

1
<UITextFieldDelegate>는 .h 파일에 있어야합니다. 그렇지 않으면 경고가 나타납니다!
Umit Kaya

22

스위프트 에서 이것을 시도하십시오 .

1 단계 : 대리인을 자신에게 위임textField

textField.delegate = self

2 단계 : 이 UITextFieldDelegate를 클래스 선언 아래에 추가하십시오.

extension YourClassName: UITextFieldDelegate {
    func textFieldShouldReturn(textField: UITextField) -> Bool {
         textField.resignFirstResponder()
        return true
    }
}

14

신속하게 다음과 같이하십시오 :
먼저 ViewController구현 에서 UITextFieldDelegate 예를 들어.

class MyViewController: UIViewController, UITextFieldDelegate {
....
}

이제 아래와 같은 방법이나 초기화하는 위치 TextField에서 리턴을 누를 때 키보드를 닫을 대리자를 추가 viewDidLoad하십시오. 예를 들어.

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

이제이 방법을 추가하십시오.

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
IB에서 델리게이트를 설정하면 두 번째 단계는 필요하지 않습니다.
hris.

(현재 Swift 버전에서) "textField :"앞에 밑줄이 있어야합니다.
Bryce Sandlund

2

이 시도,

[textField setDelegate: self];

그런 다음 textField delegate 메소드에서

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

그렇게하는 것이 가장 좋은 방법은 아닙니다.
orafaelreis

인터페이스 정의에 UITextFieldDelegate가 필요합니다.
Alp Altunel

@ AlpAltunel : 댓글 주셔서 감사합니다, 그것은 4 년 전입니다.
Vineesh TP

1

이 메소드에서 delegate UITextField및 over ride textFieldShouldReturn메소드를 설정하려면 다음 두 줄을 작성하십시오.

[textField resignFirstResponder];
return YES;

그게 다야. 코드를 작성하기 전에 UITextField속성 창에서 a의 대리자를 설정하고 Return 키 유형을 "완료"로 설정 하는 것을 잊지 마십시오 (명령 + shift + I).


1

IBAction과 함께 "Primary Action Triggered"(UITextField를 마우스 오른쪽 단추로 클릭)를 연결하고 첫 번째 응답자를 위임없이 사임 할 수 있습니다. 예 (Swift 4) :

@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
    sender.resignFirstResponder()
    ...
}

스토리 보드를 사용하는 경우 선호되는 방법입니다.
lal

1

스위프트 4

UITextField뷰 컨트롤러의 위임을 설정 field.delegate = self한 후 다음을 수행하십시오.

extension ViewController: UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        // don't force `endEditing` if you want to be asked for resigning
        // also return real flow value, not strict, like: true / false
        return textField.endEditing(false)
    }
}

마지막 키가 될 때까지 Return 키를 눌러 다음 텍스트 필드로 '탭'하길 원하는 사용자를 어떻게 처리합니까? SwiftUI에서도 가능합니다.
Learn2Code

@ Learn2Code는 관리자를 만들고, 텍스트 필드와 체인을 수집하며, 마지막 것은 종료 기능을 트리거합니다.
dimpiax

1

특정 키보드 사용 [self.view resignFirstResponder]; 을 위해 키보드를 숨기려면 키보드를보기에서 숨기려면[self.view endEditing:true];


0
[textField resignFirstResponder];

이것을 사용하십시오


0

좋아, 초보자에게는 약간 혼란 스러울 수 있다고 생각합니다. 나는 정답이 적어도 Swift4에서 위의 모든 것의 혼합이라고 생각합니다.

확장을 만들거나 이것을 사용하고 싶지만 UITextFieldDelegate를 구현 해야하는 ViewController를 사용하십시오. 재사용 성을 위해 확장 프로그램을 사용하는 것이 더 쉽다는 것을 알았습니다.

extension UIViewController : UITextFieldDelegate {
    ...
}

그러나 대안도 잘 작동합니다.

class MyViewController: UIViewController {
    ...
}

textFieldShouldReturn 메소드를 추가하십시오 (확장자 또는 ViewController에서 이전 옵션에 따라 다름)

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.endEditing(false)
}

viewDidLoad 메소드에서 텍스트 필드의 델리게이트를 self로 설정하십시오.

@IBOutlet weak var myTextField: UITextField!
...

override func viewDidLoad() {
    ..
    myTextField.delegte = self;
    ..
}

그게 다야. 지금, 당신은 누를 때 호출해야합니다.returntextFieldShouldReturn


0

이 클래스를 정의한 다음 클래스를 사용하도록 텍스트 필드를 설정하면 리턴 키가 자동으로 눌러 질 때 전체 숨기기 키보드를 자동화합니다.

class TextFieldWithReturn: UITextField, UITextFieldDelegate
{

    required init?(coder aDecoder: NSCoder) 
    {
        super.init(coder: aDecoder)
        self.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {
        textField.resignFirstResponder()
        return true
    }

}

그런 다음 스토리 보드에서 할 일은 클래스를 사용할 필드를 설정하는 것입니다.

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

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