Keyboard 即使键盘被隐藏,UITextView仍然是第一响应者
我有一个包含UITextView的TableViewCell。 在UITextView中编辑文本时,会出现另一个视图,该视图将关闭键盘。关闭该视图后,我将返回编辑UITextView,重点是UITextView;但键盘不在那里 为了进行测试,我在UITExtView上捕获了一个textselection事件,并辞去了第一响应者的职务,再次将其设置为第一响应者。然后键盘又出现了Keyboard 即使键盘被隐藏,UITextView仍然是第一响应者,keyboard,uitextview,hidden,Keyboard,Uitextview,Hidden,我有一个包含UITextView的TableViewCell。 在UITextView中编辑文本时,会出现另一个视图,该视图将关闭键盘。关闭该视图后,我将返回编辑UITextView,重点是UITextView;但键盘不在那里 为了进行测试,我在UITExtView上捕获了一个textselection事件,并辞去了第一响应者的职务,再次将其设置为第一响应者。然后键盘又出现了 当UITExtView在关闭另一个视图后获得焦点时,我是否可以捕捉到任何事件;这样我就可以让UITextView退出fi
当UITExtView在关闭另一个视图后获得焦点时,我是否可以捕捉到任何事件;这样我就可以让UITextView退出firstresponder并再次将其设置为firstresponder。定义协议,如UIViewController中所述:
protocol MyTextViewDelegate: class {
func makeFirstResponder()
}
然后在OtherVC中声明协议,并在OtherVC上调用makeFirstResponder()
class OtherVC: UIViewController {
weak var myTextViewDelegate: MyTextViewDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func btnClose(_ sender: UIButton) {
self.myTextViewDelegate?.makeFirstResponder()
self.dismiss(animated: true, completion: nil)
}
}
将didSelectRowAt更改为indexPath,并将MyTextViewDelegate的func写入如下:
extension ViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! CustomCell
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.view.endEditing(true)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "OtherVC") as! OtherVC
self.selectedIndexPath = indexPath
vc.myTextViewDelegate = self
self.present(vc, animated: true)
self.tableView.deselectRow(at: indexPath, animated: true)
}
}
extension ViewController: MyTextViewDelegate {
func makeFirstResponder() {
let cell = tableView.cellForRow(at: self.selectedIndexPath) as! CustomCell
cell.txtView.becomeFirstResponder()
}
}
注意:从情节提要的UITextView属性检查器中取消选中“已启用用户交互”。在关闭其他视图后,使用协议委托成为第一响应者。嗨,JD,请解释一下您的解决方案?我不明白。