Swift - 如何在文本字段之外点击后关闭数字键盘
Posted
技术标签:
【中文标题】Swift - 如何在文本字段之外点击后关闭数字键盘【英文标题】:Swift - How to dismiss number keyboard after tapping outside of the textfield 【发布时间】:2015-01-10 16:59:51 【问题描述】:在键盘外点击时如何从 UITextField 中关闭键盘。我试过resignFirstResponder()
,它只在输入一个数字后退出。我也试过textField.inputView = UIView.frame(frame: CGRectZero)
。我已经看到了很多我所要求的 Obj-C 版本,但我需要 Swift 等价物,因为我没有 Objective-C 的编程经验
感谢您的时间和耐心。
【问题讨论】:
textField.resignFirstResponder() 应该可以正常工作。这是上传的示例示例dropbox.com/s/e0vm89gd6uegpn0/textfield.zip?dl=0 还要在实际设备上检查你/我的代码。 【参考方案1】:向视图添加轻击手势识别器并调用 resignFirstResponder() 或 self.view.endEditing(true) 的最佳方法。我更喜欢 endEditing() 因为 resignFirstResponder 必须分别为每个文本字段完成,这与为视图本身完成的 endEditing 不同。
在 viewDidLoad 中,编写如下代码:
let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: "didTapView")
self.view.addGestureRecognizer(tapRecognizer)
现在编写 didTapView 方法来关闭键盘:
func didTapView()
self.view.endEditing(true)
现在,当您在控制器的主视图上点击键盘外部时,它将调用 didTapView 方法并关闭键盘。
Swift 3.x
viewDidLoad 中的代码应该是:
let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: #selector(ViewController.didTapView))
self.view.addGestureRecognizer(tapRecognizer)
其中 ViewController 应该是您的视图控制器的名称。
谢谢
【讨论】:
didTapView 函数放在哪里 只需在您拥有的同一个视图控制器类中添加 func。 Swift 3 要求我添加一个选择器,如下tapRecognizer.addTarget(self, action: #selector(MyViewController.didTapView))
还添加了 Swift 3 语法。谢谢@ChristyHerron【参考方案2】:
Swift 3 经过测试并可以正常工作
// dismiss keyboard on touch outside textfield
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
for txt in self.view.subviews
if txt.isKind(of: UITextField.self) && txt.isFirstResponder
txt.resignFirstResponder()
享受
Swift 2.3 经过测试并可以正常工作
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
for txt in self.view.subviews
if txt.isKindOfClass(UITextField.self) && txt.isFirstResponder()
txt.resignFirstResponder()
享受
【讨论】:
【参考方案3】:您也可以使用此方法在按下“Return”时关闭键盘
func textFieldShouldReturn(textField: UITextField!) -> Bool
self.view.endEditing(true);
return false;
确保设置您的委托
【讨论】:
【参考方案4】:如果您不想定义额外的方法,还有一种稍微简单的方法也可以使用
let tapRecognizer = UITapGestureRecognizer(target: self, action: "endEditing:")
view.addGestureRecognizer(tapRecognizer)
【讨论】:
使用这个我得到错误,use of string literal for Objective-C seletors is deprecated; use '#selector' instead
。如果我找到解决方案,我会发布。
endEditing:无法识别的选择器发送到实例【参考方案5】:
我在一个网站上找到了这段代码,它对我很有用!
//FUNCTION TO DISMISS THE KEYBOARD
func initializeHideKeyboard()
//Declare a Tap Gesture Recognizer which will trigger our dismissMyKeyboard() function
let tap: UITapGestureRecognizer = UITapGestureRecognizer(
target: self,
action: #selector(dismissMyKeyboard))
//Add this tap gesture recognizer to the parent view
view.addGestureRecognizer(tap)
@objc func dismissMyKeyboard()
//endEditing causes the view (or one of its embedded text fields) to resign the first responder status.
//In short- Dismiss the active keyboard.
view.endEditing(true)
然后只需在按钮操作或类似操作中调用此函数:
dismissMyKeyboard()
【讨论】:
以上是关于Swift - 如何在文本字段之外点击后关闭数字键盘的主要内容,如果未能解决你的问题,请参考以下文章
如果我们在后台点击任何地方,除了在 swift 中点击 popView 之外,如何删除 popView
如何将第二个viewcontroller文本字段值传递给第一个viewcontroller数组并在swift4中点击按钮时关闭
IOS swift - 如何在点击文本字段时打开新视图控制器后结束文本字段中的编辑