我只是想在 XCode 7.1.1 中使用以下函数将键盘隐藏在 TextView 中,但它不起作用。
我该如何解决这个问题?
class pictureViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var dedicatoriaCentradaTextView: UITextView!
override func viewDidLoad() {
dedicatoriaCentradaTextView.delegate = self
}
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if(text == "\n") {
dedicatoriaCentradaTextView.resignFirstResponder()
return false
}
return true
}
}
最佳答案
当重载 viewDidLoad()
方法来为您的 TextView 设置委托(delegate)时,您可能应该保留 super.viewDidLoad():
override func viewDidLoad() {
super.viewDidLoad()
// Handle the user input in the text view through delegate callbacks
dedicatoriaCentradaTextView.delegate = self
}
此后,由于您几乎已尝试正确,请使用 UITextViewDelegate
协议(protocol)中的 textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String)
方法:
// UITextViewDelegate
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.resignFirstResponder()
return false
}
else {
return true
}
}
但请注意,您在上面的方法中使用了本地 UITextView 实例(本地方法范围内)。
使用上面的建议,您的 pictureViewController
类应该看起来像
class pictureViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var dedicatoriaCentradaTextView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Handle the user input in the text view through delegate callbacks
dedicatoriaCentradaTextView.delegate = self
}
// UITextViewDelegate
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.resignFirstResponder()
return false
}
else {
return true
}
}
}
最后请注意,根据 Swift 编码约定,您的类名应以大写字母开头。即,将您的类 pictureViewController
重命名为 PictureViewController
。
关于ios - 在 TextView 中关闭键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292395/