Как скрыть клавиатуру быстрым нажатием клавиши возврата?

Я использую UITextfied при нажатии на текстовую клавиатуру, но когда я нажимаю клавишу return, клавиатура не исчезает. Я использовал следующий код:

func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
    return true;
}

метод resignfirstresponder не входит в функцию.

Ответ 1

Вы можете заставить приложение отклонить клавиатуру, используя следующую функцию

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

Вот полный пример, чтобы лучше проиллюстрировать это:

//
//  ViewController.swift
//
//

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var myTextField : UITextField

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.myTextField.delegate = self
    }

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

Источник кода: http://www.snip2code.com/Snippet/85930/swift-delegate-sample

Ответ 2

return true часть этого только говорит текстовому полю, разрешено ли ему возвращаться.
Вы должны вручную указать текстовое поле, чтобы закрыть клавиатуру (или каков ее первый респондент), и это делается с помощью resignFirstResponder(), например так:

// Called on 'Return' pressed. Return false to ignore.

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

Ответ 3

  • Добавьте UITextFieldDelegate в объявление класса:

    class ViewController: UIViewController, UITextFieldDelegate
    
  • Подключите textfield или напишите его программно

    @IBOutlet weak var userText: UITextField!
    
  • установите ваш контроллер представления, поскольку делегат текстовых полей в поле зрения загрузил:

    override func viewDidLoad() {
    super.viewDidLoad()
    self.userText.delegate = self
    }
    
  • Добавьте следующую функцию

    func textFieldShouldReturn(userText: UITextField!) -> Bool {
        userText.resignFirstResponder()
        return true;
    }
    

    со всем этим ваша клавиатура начнет отклоняться, коснувшись внешнего поля, а также нажав клавишу возврата.

Ответ 4

Простое быстрое решение 3: Добавьте эту функцию в контроллеры просмотра, которые имеют текстовое поле:

@IBAction func textField(_ sender: AnyObject) {
    self.view.endEditing(true);
}

Затем откройте свой помощник и убедитесь, что ваша Main.storyboard находится на одной стороне вашего вида, а требуемый файл view controller.swift - на другом. Нажмите на текстовое поле, а затем выберите в правой панели утилиты "Показать инспектор подключений". Управляйте перетаскиванием из "Сделанный конец при выходе" в указанную выше функцию в вашем быстром файле. Повторите для любого другого текстового поля в этой сцене и ссылайтесь на ту же функцию.

Ответ 5

Swift 4.2 - делегат не требуется

Вы можете создать выход действия из UITextField для "Первичного действия, инициируемого" и отправить в отставку первого ответчика для параметра отправителя, переданного в:

Create Action Outlet

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

Супер просто.

(Спасибо 60-секундному видео Скотта Смита за сообщение об этом: https://youtu.be/v6GrnVQy7iA)

Ответ 6

@RSC

для меня критическое дополнение в Xcode версии 6.2 (6C86e) находится в override func viewDidLoad()

 self.input.delegate = self;

Попробовал заставить его работать с ключом возврата в течение нескольких часов, пока я не нашел ваш пост, RSC. Спасибо!

Кроме того, если вы хотите скрыть клавиатуру, если вы касаетесь в любом месте экрана:

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

Ответ 7

Чтобы получить автоматическое отключение клавиатуры, я помещаю этот код в один из методов моего класса текстового поля:

textField.addTarget(nil, action:"firstResponderAction:", forControlEvents:.EditingDidEndOnExit)

Замените название своей розетки на textField.

Ответ 8

Другой способ сделать это, который в основном использует раскадровку и легко позволяет вам иметь несколько текстовых полей:

@IBAction func resignKeyboard(sender: AnyObject) {
    sender.resignFirstResponder()
}

Подключите все текстовые поля для этого контроллера представления к этому действию в событии Did End On Exit каждого поля.

Ответ 9

Когда пользователь нажимает кнопку "Готово" на текстовой клавиатуре, будет создано событие "Завершить выход"; в то время нам нужно сообщить текстовому полю, чтобы он отказался от контроля, чтобы клавиатура исчезла. Для этого нам нужно добавить метод действия к нашему классу контроллера. Выберите ViewController.swift, добавьте следующий метод действий:

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

Выберите Main.storyboard в Навигаторе проектов и вызовите инспектор соединений. Перетащите из круга рядом с надписью "Закончить на выходе" на желтый значок "Контроллер" в раскадровке и отпустите. Появится небольшое всплывающее меню, содержащее имя одного действия, которое мы только что добавили. Нажмите на действие textFieldDoneEditing, чтобы выбрать его и его.

Ответ 10

Я бы очень хотел запустить класс из RSC:

import Foundation
import UIKit

// Don't forget the delegate!
class ViewController: UIViewController, UITextFieldDelegate {

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

@IBOutlet var myTextField : UITextField?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.myTextField.delegate = self;
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func textFieldShouldReturn(textField: UITextField!) -> Bool {
    self.view.endEditing(true);
    return false;
}

}

Ответ 11

Здесь обновление Swift 3.0 для комментария peacetype:

textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)

Ответ 12

Swift 3

Добавьте этот код ниже в свой VC

//hide keyboard when user tapps on return key on the keyboard
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true);
    return false;
}

Работает для меня

Ответ 13

Swift

Использование необязательной функции из UITextFieldDelegate.

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

false означает, что поле можно попросить уйти в отставку. true - принудительно уйти в отставку.

Ответ 14

Убедитесь, что ваш делегат textField установлен в контроллер представления, из которого вы записываете код, связанный с текстовым полем.

self.textField.delegate = self

Ответ 15

вы можете поместить это где угодно, но не в UIButton

 func TextFieldEndEditing(text fiend name: UITextField!) -> Bool
{
    return (false)
}

то вы можете поместить этот код в кнопку (также, например):

self.view.endEditing(true)

это сработало для меня

Ответ 16

В контроллере представления вы используете:

//suppose you are using the textfield label as this

@IBOutlet weak var emailLabel: UITextField!
@IBOutlet weak var passwordLabel: UITextField!

//then your viewdidload should have the code like this
override func viewDidLoad() {
        super.viewDidLoad()

        self.emailLabel.delegate = self
        self.passwordLabel.delegate = self

    }

//then you should implement the func named textFieldShouldReturn
 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

// -- then, further if you want to close the keyboard when pressed somewhere else on the screen you can implement the following method too:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true);
    }

Ответ 17

override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(handleScreenTap(sender:)))
    self.view.addGestureRecognizer(tap)}

тогда вы используете эту функцию

func handleScreenTap(sender: UITapGestureRecognizer) {
    self.view.endEditing(true)
}

Ответ 18

Я ненавижу добавлять ту же функцию для каждого UIViewController. Расширяя UIViewController для поддержки UITextFieldDelegate, вы можете обеспечить поведение по умолчанию "нажатие возврата".

extension UIViewController: UITextFieldDelegate{
    public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true;
    }
}

Когда вы создаете новый UIViewController и UITextField, все, что вам нужно сделать, это написать однострочный код в вашем UIViewController.

override func viewDidLoad() {
    super.viewDidLoad()
    textField.delegate = self
}

Вы даже можете пропустить этот однострочный код, перехватив делегат в Main.storyboard. (Используя "Ctrl" и перетащите из UITextField в UIViewController)