it-swarm.com.ru

Как скрыть клавиатуру в Swift при нажатии клавиши возврата?

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

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

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

180
Ashwinkumar Mangrulkar

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

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

344
rsc

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

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

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    textField.resignFirstResponder()
    return true
}
92
Mick MacCallum
  • Добавьте 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;
    }
    

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

44
Satnam Sync

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

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

Затем откройте ваш помощник редактора и убедитесь, что ваш Main.storyboard находится на одной стороне вашего представления, а нужный контроллер представления. Файл Swift находится на другой. Щелкните текстовое поле, а затем выберите на правой панели служебных программ "Показать вкладку Инспектор подключений". Управляйте перетаскиванием из функции "Закончено ли при выходе" в указанную выше функцию в файле Swift Повторите эти действия для любого другого текстового поля в этой сцене и укажите ссылку на ту же функцию.

22
elarcoiris

@RSC

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

 self.input.delegate = self;

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

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

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

13
Tobias F. Meier

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

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

Замените название вашей торговой точки на textField.

11
peacetype

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

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

Create Action Outlet

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

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

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

10
Mark Moeykens

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

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

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

10
James Thompson

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

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

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

8
Ian Seth Colin

Я бы предложил начать Класс из SRC:

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;
}

}

7
LAOMUSIC ARTS

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

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

Свифт 3

Добавьте этот код ниже к вашему VC

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

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

5
Gilad Brunfman

Swift

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

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

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

3
dimpiax

вы можете поместить это в любом месте, но не в UIButton

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

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

self.view.endEditing(true)

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

2
Blake Scott

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

self.textField.delegate = self
2
Miladinho

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

//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);
    }
2
kanishk verma
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)
}
0
Santi RibeiroO