【发布时间】:2015-04-29 06:42:38
【问题描述】:
我有一个UIViewController,其中有一个UITextField,当我点击离开或视图被关闭时,我试图关闭键盘。但是,当我拨打resignFirstResponder() 时,键盘仍然没有关闭,我不太清楚为什么。这是我的代码:
class MessageViewController: UIViewController, UITextFieldDelegate {
var messageTextField : UITextField = UITextField()
override func viewDidLoad() {
...
messageTextField.frame = CGRectMake(10, UIScreen.mainScreen().bounds.size.height-50, UIScreen.mainScreen().bounds.size.width-80, 40)
messageTextField.delegate = self
messageTextField.borderStyle = UITextBorderStyle.Line
messageTextField.becomeFirstResponder()
self.view.addSubview(messageTextField)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
...
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
println("Touched")
}
func keyboardWillShow(notification: NSNotification) {
var keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey]as? NSValue)?.CGRectValue()
let messageFrame = messageTextField.frame
let newY = messageFrame.origin.y - keyboardSize!.height
messageTextField.frame = CGRectMake(messageFrame.origin.x, newY, messageFrame.size.width, messageFrame.size.height)
}
func keyboardWillHide(notification: NSNotification) {
var keyboardSize = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey]as? NSValue)?.CGRectValue()
let messageFrame = messageTextField.frame
let newY = messageFrame.origin.y - keyboardSize!.height
messageTextField.frame = CGRectMake(messageFrame.origin.x, newY, messageFrame.size.width, messageFrame.size.height)
}
}
有谁知道为什么键盘没有关闭?我以编程方式将 UITextField 添加到视图中,而不是使用情节提要。这有什么不同吗?
【问题讨论】:
-
使用返回 [textField resignFirstResponder];
-
使用 TapGesturerecognizer
-
@AshokLondhe 我同时使用了 self.view.endEditing(true) 和 textField.resignFirstResponder()。都没有用。
-
@user1998511 调试您的应用程序并查看委托方法是否被调用..
-
@AshokLondhe 我的委托方法确实被调用了
标签: ios swift uitextfield