Как скрыть клавиатуру быстрым нажатием клавиши возврата?
Я использую 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)