скрыть клавиатуру для текстового поля на языке программирования swift
У меня мало опыта в Objective-C. Я хочу, чтобы скрыть клавиатуру для текстового поля, используя язык программирования Swift.
Я также пробовал это
func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
return true;
}
но метод не запускается, когда я нажимаю return. Кому-нибудь повезло с этим?
13 ответов
Я думаю, что проблема заключается в настройке делегата.
пожалуйста, установите делегат textfield для вашего ViewController следующим образом
class ViewController: UIViewController,UITextFieldDelegate {
а затем создайте IBOutlet для вашего текстового поля, как это
@IBOutlet var txtTest : UITextField = nil
убедитесь, что он подключен к текстовому полю в вашем представлении в раскадровке.
наконец, установите свой делегат с помощью
txtTest.delegate=self
мы почти закончили. Теперь поместите эту функцию делегата в свой класс.
func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
textField.resignFirstResponder()
return true;
}
надеюсь, что это решит вашу проблему.
просто переопределите метод UIViewController под названием "touchesBegan" и установите endEditing в true. Вот так:
override func touchesBegan(touches: NSSet!, withEvent event: UIEvent!) {
self.view.endEditing(true)
}
чтобы скрыть клавиатуру при нажатии кнопки, необходимо использовать следующую функцию.
self.view.endEditing(true)
это работает при нажатии кнопки.
надеюсь, это поможет кому-то там.
поехали:
- добавьте текстовое поле в свой вид
- создайте новый файл Swift
- установите этот новый файл в качестве класса для этого конкретного представления
- добавьте текстовое поле в свой вид
- создайте выход для текстового поля (my называется "txtField"!)
-
замените любой код в файле класса Swift следующим:
import Foundation import UIKit //01 create delegation class MyViewController2: UIViewController,UITextFieldDelegate { @IBOutlet weak var txtField: UITextField!=nil override func viewDidLoad() { super.viewDidLoad() // additional setup after loading the view //02 set delegate to textfield txtField.delegate = self } //03 textfield func for the return key func textFieldShouldReturn(textField: UITextField) -> Bool { txtField.resignFirstResponder() return true; } //textfield func for the touch on BG override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { txtField.resignFirstResponder() self.view.endEditing(true) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() //dispose of any resources that can be recreated } }
- попробуйте, будьте счастливы и говорят спасибо !
-
добавить UITextFieldDelegate в объявление класса:
класс ViewController: UIViewController, UITextFieldDelegate
-
подключите текстовое поле или напишите его программно
@IBOutlet слабый var userText: UITextField!
-
установите контроллер представления в качестве делегата текстовых полей в представлении:
override func viewDidLoad() { super.viewDidLoad() self.userText.delegate = self }
-
добавить следующие функция
func textFieldShouldReturn(userText: UITextField!) -> Bool { userText.resignFirstResponder() return true; }
со всем этим ваша клавиатура начнет отклонять, коснувшись вне текстового поля, а также нажав клавишу возврата.
Как сказал @spfursich, лучший способ заключается в том, что при касании пользователя в любом месте над клавиатурой клавиатура исчезнет. Вот код :
override func viewDidLoad() {
super.viewDidLoad()
var tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "DismissKeyboard")
self.view.addGestureRecognizer(tap)
}
func DismissKeyboard(){
self.view.endEditing(true)
}
простым способом скрыть клавиатуру просто переопределите UIView "touchBegan method". Поэтому, когда вы нажимаете любое место в клавиатуре просмотра, скрыть. вот пример кода.. (Swift 3.0 обновленный код)
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
{
self.view.endEditing(true)
}
сначала вам нужно установить delegate
для вашего текстового поля вам нужно включить resignFirstResponder()
чтобы скрыть клавиатуру при нажатии кнопки возврата keybaord.
func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
textField .resignFirstResponder()
return true;
}
вы можете попробовать этот код, чтобы ключ "return"выполнял код.
func textFieldShouldReturn(textField: UITextField) -> Bool{
textField.resignFirstResponder()
performAction()
return true;
}
func performAction(){
//execute code for your action inside this function
}
надеюсь, это поможет вам.
вы также можете сделать такой: добавить событие "Did end on exit" из инспектора соединений вашего текстового поля и подключите его к методу из соответствующего ViewController
в моем примере я подключаю его к методу под названием "ended"
объявить отправителя как UITextField, а затем вызвать отправителя.resignFirstResponder(); Вот так:
@IBAction func ended (sender: UITextField){ sender.resignFirstResponder(); }
вот я решил проблему, что когда клавиатура открывается, и вид скрывается за клавиатурой.... это время мы должны изменить ограничения UI динамически для того чтобы сделать весь вид. В моем случае я меняю bottonConstraint UITextField
динамически.
Итак, вот полный код. У меня есть один UITextView
и UITextField
on UIViewController
работать на протяжении всего испытания...
import UIKit
class ViewController: UIViewController, UITextViewDelegate, UITextFieldDelegate {
@IBOutlet weak var textView: UITextField!
@IBOutlet weak var textField: UITextView!
/*Height Constraint for textField*/
@IBOutlet weak var bottom: NSLayoutConstraint!
var defaultHeight:CGFloat = 0.0;
override func viewDidLoad() {
super.viewDidLoad()
defaultHeight = bottom.constant;
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil);
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil);
}
override func resignFirstResponder() -> Bool {
textView.resignFirstResponder();
textField.resignFirstResponder();
return true;
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
resignFirstResponder()
print("touched began")
}
func textViewDidEndEditing(textView: UITextView) {
resignFirstResponder()
print("text view did end editing")
}
func textViewShouldEndEditing(textView: UITextView) -> Bool {
resignFirstResponder()
print("text view should end editing")
return true;
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
print("text field should return")
resignFirstResponder()
return true;
}
func textFieldDidEndEditing(textField: UITextField) {
resignFirstResponder()
print("did end editing")
}
func keyboardWillShow(notification: NSNotification) {
print("keyboard will show.............")
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
let a = keyboardSize.height;
self.bottom.constant = a + defaultHeight;
self.view.updateConstraints();
}
}
func keyboardWillHide(nofication:NSNotification)
{
print("keyboard will hide................")
bottom.constant = defaultHeight;
self.view.updateConstraints();
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
UIApplication.sharedApplication().sendAction(#selector(UIResponder.resignFirstResponder), to:nil, from:nil, forEvent:nil)
теперь в Swift 3 самые простые методы -
Способ 1: вызывается при нажатии клавиши "return".
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
textField1.resignFirstResponder()
textField2.resignFirstResponder()
return true;
}
Способ 2: вызывается при нажатии клавиши "return".
func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
self.view.endEditing(true)
return true;
}
Способ 3: глобальный метод записи ввиду загрузки
self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
Примечание: Не забудьте добавить это. Другие мудрые ее не работают.
UIGestureRecognizerDelegate, UITextFieldDelegate
Я надеюсь, что это будет работать для вас :)