我使用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 在函数中没有起作用。
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
! - Cesarefunc textFieldShouldReturn(textField: UITextField) -> Bool {
更改为 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
- sea-kgreturn true
只是告诉文本框它是否允许返回。您需要手动告诉文本框关闭键盘(或任何第一响应者),可以使用resignFirstResponder()
来完成:
// Called on 'Return' pressed. Return false to ignore.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
UITextFieldDelegate
不是必须的吗? - mfaani您可以从UITextField中创建一个动作输出至“Primary Action Triggered”,并在传递的发送器参数上放弃第一响应器:
@IBAction func done(_ sender: UITextField) {
sender.resignFirstResponder()
}
非常简单。
(感谢Scott Smith的60秒视频向我推荐此方法:https://youtu.be/v6GrnVQy7iA)
在类声明中添加UITextFieldDelegate
:
class ViewController: UIViewController, UITextFieldDelegate
连接textfield
或以编程方式编写它。
@IBOutlet weak var userText: UITextField!
在view did load中将你的视图控制器设置为文本字段的代理:
override func viewDidLoad() {
super.viewDidLoad()
self.userText.delegate = self
}
添加以下函数
func textFieldShouldReturn(userText: UITextField!) -> Bool {
userText.resignFirstResponder()
return true;
}
有了这个,你的键盘将会在触摸文本框外部以及按下回车键时消失。
UITextFieldDelegate
...非常感谢! - Adriano Tadao我不喜欢在每个UIViewController中都添加相同的功能。 通过扩展UIViewController以支持UITextFieldDelegate,你可以提供一个“return键被按下”的默认行为。
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 中钩取委托 (Using "ctrl" and drag from UITextField to UIViewController) 来省略这一行代码。简单的 Swift 3 解决方案: 将此函数添加到包含文本字段的视图控制器中:
@IBAction func textField(_ sender: AnyObject) {
self.view.endEditing(true);
}
打开助手编辑器,确保你的Main.storyboard在视图的一侧,所需的view controller.swift文件在另一侧。点击文本框,然后从右侧实用程序面板中选择“显示连接检查器”选项卡。从“Did End on Exit”控件向上拖动到你的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
。
viewDidLoad
中加入了 mytextfield.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)
(Swift 5版本),但是无论是点击“返回”还是在文本框外部点击都没有起作用。我通过创建一个输出口来获取文本框。 - NephviewDidAppear
方法中。textField.delegate = self
textField.addTarget(self, action: #selector(MySubclass.textChanged(_:)), for: .editingChanged)
})```
这可能有点针对我的情况过于具体,但希望能有所帮助。尝试在```viewDidAppear```中进行调用,并根据需要符合任何代理。
- peacetype另一种主要使用Storyboard并轻松允许您拥有多个文本字段的方法是:
@IBAction func resignKeyboard(sender: AnyObject) {
sender.resignFirstResponder()
}
将视图控制器中所有文本字段连接到每个字段的 Did End On Exit
事件上。
以下是针对peacetype评论的Swift 3.0更新:
textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)