UITextFieldでReturnキーを押したときにキーボードを非表示にする方法は?


148

テキストフィールドをクリックすると、キーボードが表示されます。ユーザーがReturnキーを押したときに非表示にするにはどうすればよいですか?


13
Stack Overflowの良い点は、多くの質問、特に簡単な質問にすでに回答が出ていることです。したがって、質問する前に、まず回答を探してください。ご覧ください。簡単です:stackoverflow.com/search
q

これはUITextfieldのサブクラスであり、テキスト/文字列の条件に従ってUIReturnKeyを動的に変更します: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 2012年

7
あなたは、その後にInterface Builderを使用して、ファイルのデリゲートを作成する場合は、<UITextFieldDelegateは> .. .hファイルでは必要ありません
Saurabh

1
.hファイルに<UITextFieldDelegate>を追加し、viewdidloadにデリゲートを設定する[yourTextField setDelegate:self]; それを完成させます!
Umit Kaya 2015

@Saurabhストーリーボードで作成されたVCの何が特別なのですか?
Paul Brewczynski 2017年

62

viewDidLoad宣言します。

[yourTextField setDelegate:self];

次に、デリゲートメソッドのオーバーライドを含めます。

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

6
setDelegate:リマインダーの+1 。間違いなく忘れており、以前はコードが機能していませんでした。
piperchester 2014年

2
渡されているので、これはyourTextFieldではなく、textFieldである必要はありませんか?
クライヴジェフリーズ2014

は、textFieldのデリゲートを宣言する方法です
オスカーカステリョン2014年

1
<UITextFieldDelegate>は.hファイルにある必要があります。そうでない場合、警告が表示されます!
Umit Kaya 2015

22

Swiftでこれを試してください、

手順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 {
....
}

次に、以下のような方法で、または初期化している場所でTextFieldReturnキーがタップされたときにキーボードを非表示にするデリゲートを追加しviewDidLoadます。たとえば

override func viewDidLoad() {

    super.viewDidLoad()   
    myTextField.delegate = self
}

次に、このメソッドを追加します。

func textFieldShouldReturn(textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    return true
}

1
IBでデリゲートを設定する場合、2番目のステップは不要です。
hris.to 2016年

(Swiftの現在のバージョンでは) "textField:"の前にアンダースコアがあるはずです
Bryce Sandlund '10年

2

これを試して、

[textField setDelegate: self];

次に、textFieldデリゲートメソッドで

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

これは、そのためのベストプラクティスではありません。
orafaelreis 14

インターフェイス定義にUITextFieldDelegateが必要です。
Alp Altunel

@AlpAltunel:コメントをありがとう、それは4年前でした。
Vineesh TP 2018

1

のデリゲートを設定しUITextField、乗って、textFieldShouldReturnメソッド、そのメソッドで次の2行を記述するだけです。

[textField resignFirstResponder];
return YES;

それでおしまい。コードを記述する前にUITextField、プロパティウィンドウからデリゲートを設定し、Returnキータイプを「完了」に設定することを忘れないでください(コマンド+ Shift + I)。


1

「プライマリアクショントリガー」(UITextFieldを右クリック)をIBActionに接続し、ファーストレスポンダを(委任なしで)辞任できます。例(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

わかりました、初心者にとっては少し混乱するかもしれません。正解は、少なくともSwift4では、上記すべての組み合わせであると思います。

拡張機能を作成するか、これを使用するViewControllerを使用しますが、UITextFieldDelegateを実装してください。再利用のために、拡張機能を使用する方が簡単だと思いました。

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

このクラスを定義し、テキストフィールドを設定してそのクラスを使用します。これにより、Enterキーが自動的に押されたときに非表示のキーボード全体が自動化されます。

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.