我正在尝试在导航栏的右侧添加可点击按钮。当UITextView
处于活动状态(即键盘存在时)时,可以单击该按钮,但键盘解除后不再可点击。代码是:
import UIKit
class DetailViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var textview: UITextView!
let buttonDone = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(didClickDone))
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = buttonDone
self.textview.becomeFirstResponder()
}
@objc func didClickDone() {
print("Clicked on Done")
self.textview.resignFirstResponder()
}
}
因此,当UITextView
是第一个响应者时,点击“完成”按钮会打印一条消息,然后解除键盘。
之后,无论我点击“完成”按钮多少次,都不会打印消息。任何意见都非常感谢!
其他信息:
此DetailViewController
具有嵌入导航视图控制器中的列表视图控制器,如下所示:
以下是DetailViewController
列表视图控制器启用了手势识别器。不确定它是否与此有关...手势识别器仅设置为长按。
更新1:我删除了textview.becomeFirstResponder()
方法中的ViewDidLoad()
行。当我进入视图时,键盘没有按预期显示。在此状态下,单击按钮不会打印消息...
因此我认为这不是resignFirstResponder()
...
更新2:我已将target: nil
更改为target: self
,但没有用...
但感谢所有回复!任何进一步的帮助表示赞赏......
答案 0 :(得分:0)
请更新您的代码,如下所示
let buttonDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(didClickDone))
@@IBAction func didClickDone(sender:UIBarButtonItem) {
print("Clicked on Done")
self.textview.resignFirstResponder()
self.view.endEditing(true)
}
答案 1 :(得分:0)
在viewDidLoad
内,创建UIBarButtonItem
并将其分配到那里,而不是将其声明为类成员。
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(didClickDone))
self.textview.becomeFirstResponder()
}