不能解雇键盘,UITextField委托被称为OK

问题描述:

这个问题一直让我发疯。看起来无论我尝试什么,只要在简单的Swift程序中显示,我都无法隐藏键盘。不能解雇键盘,UITextField委托被称为OK

当我在textFieldShouldReturn中resignFirstResponder()时不起作用,在通过从touchesBegan(...)调用endEditing()来处理背景触摸时它不起作用。我可以看到,当我为它们设置调试器断点时,这些相应的方法全部被调用,所以委托被正确设置并按预期调用。

下面是我的具体步骤:

  • 创建一个新的单一视图应用斯威夫特项目
  • 将一个的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 
    } 
} 

您正在返回'false''textFieldShouldEndEditing'。下面是从'UITextFieldDelegate'文件的摘录:

返回值

YES如果编辑应停止;否则,没有如果编辑会话 应继续

讨论

当文本字段被要求辞职第一 响应状态时调用此方法。当您的应用程序询问文字 字段的焦点或当用户尝试将编辑焦点更改为另一个控件时,可能会发生这种情况。但是,在焦点实际发生变化之前,文本字段会调用此方法,以便让您的代表有机会决定是否应该使用 。

通常情况下,您将从此方法返回YES以允许文字 字段退出第一个响应者状态。但是,如果代理人在 文本字段中检测到无效内容,您可能会返回NO, 。通过返回NO,可以防止用户将 切换到另一个控件,直到文本字段包含有效值。

Source

所以,要么返回从中'true'或彻底去除方法,除非你真的需要做的东西在里面有用。也应该删除'textFieldDidBeginEditing''touchesBegan'。我真的很惊讶,相同的代码在Objective-C中工作。

+1

哦,对于......我从一些示例代码中剪切并粘贴了一组UITextDelegate方法,并且完全忽略了其他方法,假设它们是无害的样板文件。而且你100%正确,当我在Obj-C中进行'等价'测试时,我刚刚实现了我感兴趣的回调函数,并且忽略了其他函数,所以它工作正常。咄! – TRB 2014-11-24 17:58:57