テキストフィールドをクリックすると、キーボードが表示されます。ユーザーがリターンキーを押したときに非表示にするにはどうすればよいですか?
最初にUITextFieldのファイルデリゲートを作成します
@interface MYLoginViewController () <UITextFieldDelegate>
@end
次に、このメソッドをコードに追加します。
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
self.textField.delegate = self;
も追加します
viewDidLoad
で宣言:
[yourTextField setDelegate:self];
次に、デリゲートメソッドのオーバーライドを含めます。
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
Swiftでこれを試してください、
ステップ1:デリゲートを自分としてtextField
に設定します
textField.delegate = self
ステップ2:このUITextFieldDelegateをクラス宣言の下に追加し、
extension YourClassName: UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
Swiftでは次のようにします。
最初に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
}
View Controllerで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)
}
}
「Primary Action Triggered」(UITextFieldを右クリック)をIBActionに接続し、ファーストレスポンダーを(委任なしで)辞任できます。例(Swift 4):
@IBAction func textFieldPrimaryAction(_ sender: UITextField) {
sender.resignFirstResponder()
...
}
UITextField
のデリゲートを設定し、オーバーライド、textFieldShouldReturn
メソッドを設定します。このメソッドでは、次の2行を記述するだけです。
[textField resignFirstResponder];
return YES;
それでおしまい。コードを書く前に、UITextField
のデリゲートを設定し、プロパティウィンドウからReturnキータイプを「完了」に設定することを忘れないでください(command + shift + I)。
これを試して、
[textField setDelegate: self];
次に、textFieldデリゲートメソッドで
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
OK、初心者にとっては少し混乱するかもしれないと思います。少なくとも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;
..
}
それがすべてのはずです。これで、return
を押すと、textFieldShouldReturn
が呼び出されます。
[textField resignFirstResponder];
これを使って
このクラスを定義し、クラスを使用するようにテキストフィールドを設定すると、リターンが自動的に押されたときに非表示キーボード全体が自動化されます。
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
}
}
次に、ストーリーボードで行う必要があるのは、クラスを使用するようにフィールドを設定することだけです。