Я использую UITextfied
при нажатии на текстовую клавиатуру, но когда я нажимаю клавишу return, клавиатура не исчезает. Я использовал следующий код:
func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
return true;
}
метод resignfirstresponder не входит в функцию.
Вы можете заставить приложение отклонить клавиатуру, используя следующую функцию
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
UITextFieldDelegate
!
return true
часть этого только говорит текстовому полю, разрешено ли ему возвращаться.
Вы должны вручную указать текстовое поле, чтобы закрыть клавиатуру (или каков ее первый респондент), и это делается с помощью resignFirstResponder()
, например так:
// Called on 'Return' pressed. Return false to ignore.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
Добавьте 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;
}
со всем этим ваша клавиатура начнет отклоняться, коснувшись внешнего поля, а также нажав клавишу возврата.
UITextFieldDelegate
... большое спасибо!
Простое быстрое решение 3: Добавьте эту функцию в контроллеры просмотра, которые имеют текстовое поле:
@IBAction func textField(_ sender: AnyObject) {
self.view.endEditing(true);
}
Затем откройте свой помощник и убедитесь, что ваша Main.storyboard находится на одной стороне вашего вида, а требуемый файл view controller.swift - на другом. Нажмите на текстовое поле, а затем выберите в правой панели утилиты "Показать инспектор подключений". Управляйте перетаскиванием из "Сделанный конец при выходе" в указанную выше функцию в вашем быстром файле. Повторите для любого другого текстового поля в этой сцене и ссылайтесь на ту же функцию.
@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);
}
Чтобы получить автоматическое отключение клавиатуры, я помещаю этот код в один из методов моего класса текстового поля:
textField.addTarget(nil, action:"firstResponderAction:", forControlEvents:.EditingDidEndOnExit)
Замените название своей розетки на textField
.
Другой способ сделать это, который в основном использует раскадровку и легко позволяет вам иметь несколько текстовых полей:
@IBAction func resignKeyboard(sender: AnyObject) {
sender.resignFirstResponder()
}
Подключите все текстовые поля для этого контроллера представления к этому действию в событии Did End On Exit
каждого поля.
Когда пользователь нажимает кнопку "Готово" на текстовой клавиатуре, будет создано событие "Завершить выход"; в то время нам нужно сообщить текстовому полю, чтобы он отказался от контроля, чтобы клавиатура исчезла. Для этого нам нужно добавить метод действия к нашему классу контроллера. Выберите ViewController.swift, добавьте следующий метод действий:
@IBAction func textFieldDoneEditing(sender: UITextField) {
sender.resignFirstResponder()}
Выберите Main.storyboard в Навигаторе проектов и вызовите инспектор соединений. Перетащите из круга рядом с надписью "Закончить на выходе" на желтый значок "Контроллер" в раскадровке и отпустите. Появится небольшое всплывающее меню, содержащее имя одного действия, которое мы только что добавили. Нажмите на действие textFieldDoneEditing, чтобы выбрать его и его.
Я бы очень хотел запустить класс из 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;
}
}
Здесь обновление Swift 3.0 для комментария peacetype:
textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)
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;
}
Работает для меня
В контроллере представления вы используете:
//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);
}
Использование необязательной функции из UITextFieldDelegate
.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
return textField.endEditing(false)
}
false
означает, что поле можно попросить уйти в отставку. true
- принудительно уйти в отставку.
Убедитесь, что ваш делегат textField установлен в контроллер представления, из которого вы записываете код, связанный с текстовым полем.
self.textField.delegate = self
Вы можете создать выход действия из UITextField для " Первичного инициируемого действия " и отправить в отставку первого респондента по параметру отправителя, переданному в:
@IBAction func done(_ sender: UITextField) {
sender.resignFirstResponder()
}
Супер просто.
(Спасибо Скотту Смиту за 60-секундное видео за сообщение об этом: https://youtu.be/v6GrnVQy7iA)
вы можете поместить это где угодно, но не в UIButton
func TextFieldEndEditing(text fiend name: UITextField!) -> Bool
{
return (false)
}
то вы можете поместить этот код в кнопку (также, например):
self.view.endEditing(true)
это сработало для меня