无法关闭键盘,UITextField 委托被调用 OK
Posted
技术标签:
【中文标题】无法关闭键盘,UITextField 委托被调用 OK【英文标题】:Can't dismiss keyboard, UITextField delegate being called OK 【发布时间】:2014-11-23 17:55:35 【问题描述】:这个问题一直让我发疯。似乎无论我尝试什么,一旦它在我的简单 Swift 程序中显示,我都无法隐藏键盘。
当我在 textFieldShouldReturn 中 resignFirstResponder() 时它不起作用,通过从 touchesBegan(...) 调用 endEditing() 来处理背景触摸时它也不起作用。当我为它们设置调试器断点时,我可以看到这些各自的方法都被调用了,因此委托被正确设置并按预期被调用。
以下是我采取的具体步骤:
创建一个新的单视图应用 Swift 项目 将 UITextField 拖到视图上,连接 IBOutlet,并将 ViewController 设置为 UITextFieldDelegate。 在 iPhone 6 模拟器或 iPhone 6 设备上运行 键盘一旦出现,就永远不会消失!!我没有想法 - 我错过了什么???
这是我的 ViewController 的全部内容:
import UIKit
class ViewController: UIViewController, UITextFieldDelegate
@IBOutlet weak var myTextField: UITextField!
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
myTextField.delegate = self
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
self.view.endEditing(true)
func textFieldDidBeginEditing(textField: UITextField!)
return
func textFieldShouldEndEditing(textField: UITextField!) -> Bool
return false
func textFieldShouldReturn(textField: UITextField!) -> Bool
textField.resignFirstResponder()
return true
【问题讨论】:
【参考方案1】:您正在从'textFieldShouldEndEditing'
返回'false'
。以下是'UITextFieldDelegate'
文档的摘录:
返回值
是,如果编辑应该停止;否则,如果编辑会话为 NO 应该继续
讨论
当文本字段被要求退出第一个时调用此方法 响应者状态。当您的应用程序询问文本时,可能会发生这种情况 退出焦点或用户尝试更改编辑的字段 专注于另一个控件。然而,在焦点实际改变之前, 文本字段调用此方法让您的委托有机会 决定是否应该。
通常,您会从此方法返回 YES 以允许文本 字段以辞去第一响应者的身份。你可能会返回 NO, 但是,如果您的委托人在 文本域。通过返回 NO,您可以阻止用户切换 到另一个控件,直到文本字段包含有效值。
Source
所以,要么从中返回'true'
,要么完全删除该方法,除非你真的需要在其中做一些有用的事情。 'textFieldDidBeginEditing'
和'touchesBegan'
也应该被删除。我真的很惊讶同样的代码在 Objective-C 中也能工作。
【讨论】:
哦,天哪……我已经从一些示例代码中剪切并粘贴了一组 UITextDelegate 方法,并且完全忽略了其他方法,假设它们是无害的样板。你是 100% 正确的,当我在 Obj-C 中进行“等效”测试时,我只是实现了我感兴趣的回调,而忽略了其他回调,所以它工作得很好。呵呵!以上是关于无法关闭键盘,UITextField 委托被调用 OK的主要内容,如果未能解决你的问题,请参考以下文章
UITextfield在UITableViewCells中 - 关闭键盘
自定义 UITextField 委托方法 shouldChangeCharactersIn 没有被调用
UIAlertController 实用程序类无法调用 UITextField 委托或目标,但在 UIViewController 中工作