我UITextfied
在单击文本键盘时正在使用,但是当我按下return键时,键盘没有消失。我使用以下代码:
func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
return true;
}
方法resignfirstresponder没有起作用。
我UITextfied
在单击文本键盘时正在使用,但是当我按下return键时,键盘没有消失。我使用以下代码:
func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
return true;
}
方法resignfirstresponder没有起作用。
Answers:
您可以使用以下功能使应用关闭键盘
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
!
func textFieldShouldReturn(textField: UITextField) -> Bool {
更改为 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
此return true
部分仅告诉文本字段是否允许返回。
您必须手动告诉文本字段关闭键盘(或键盘的第一个响应器),并使用完成此操作resignFirstResponder()
,如下所示:
// Called on 'Return' pressed. Return false to ignore.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
UITextFieldDelegate
吗?
添加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
...非常感谢!
您可以从UITextField为“ Primary Action Triggered ” 创建一个动作出口,并在传入的sender参数上为第一响应者辞职:
@IBAction func done(_ sender: UITextField) {
sender.resignFirstResponder()
}
超级简单。
(感谢Scott Smith的60秒视频为我提供了有关此方面的提示:https : //youtu.be/v6GrnVQy7iA)
@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
。
mytextfield.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)
(Swift 5版本)放进去了,viewDidLoad
但是既没有返回,也没有点击文本框外的某个地方。我通过创建每个插座来获得文本字段。
viewDidAppear
那个类的方法中。UIAlertController.addTextField(configurationHandler: {(textField: UITextField!) in textField.delegate = self textField.addTarget(self, action: #selector(MySubclass.textChanged(_:)), for: .editingChanged) })
这可能对我的情况而言太具体了,但希望能有所帮助。尝试在内部进行呼叫,viewDidAppear
并在必要时与任何代表保持一致。
另一种主要使用情节提要并轻松允许您具有多个文本字段的方式是:
@IBAction func resignKeyboard(sender: AnyObject) {
sender.resignFirstResponder()
}
在Did End On Exit
每个字段发生事件时,将该视图控制器的所有文本字段连接到该动作。
我想从RSC初始化Class:
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;
}
}
当用户点击文本键盘上的“完成”按钮时,将生成“退出时结束”事件。那时,我们需要告诉文本字段放弃控制,以便键盘消失。为此,我们需要在控制器类中添加一个动作方法。选择ViewController.swift添加以下操作方法:
@IBAction func textFieldDoneEditing(sender: UITextField) {
sender.resignFirstResponder()}
在“项目浏览器”中选择Main.storyboard,然后打开连接检查器。从退出结束时的圆圈旁边拖动到情节提要中的黄色“视图控制器”图标,然后放开。将会出现一个小的弹出菜单,其中包含一个我们刚刚添加的动作的名称。单击textFieldDoneEditing操作以选择它,仅此而已。
这是对Peacetype注释的Swift 3.0更新:
textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)
我讨厌向每个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)
在视图控制器中,您正在使用:
//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);
}
您应该将UITextfied与视图控制器的委托连接,以使此函数称为
一键隐藏键盘并在打开的键盘上移动视图:Swift 5
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(taped))
view.addGestureRecognizer(tap)
NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func taped(){
self.view.endEditing(true)
}
@objc func KeyboardWillShow(sender: NSNotification){
let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size)!
if self.view.frame.origin.y == 0{
self.view.frame.origin.y -= keyboardSize.height
}
}
@objc func KeyboardWillHide(sender : NSNotification){
let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size)!
if self.view.frame.origin.y != 0{
self.view.frame.origin.y += keyboardSize.height
}
}