即使隐藏了键盘,UITextView仍然是第一响应者

时间:2017-07-11 06:51:47

标签: keyboard uitextview hidden

我有一个包含UITextView的TableViewCell。 在UITextView中编辑文本时,会出现另一个视图并解除键盘。关闭该视图后,我回到编辑UITextView,并重点关注UITextView;但键盘不在那里。

对于刚刚进行测试,我在UITExtView上捕获了一个textselection事件,并作为第一响应者辞职并再次将其设置为第一响应者。然后键盘又出现了。

当关闭另一个视图后UITExtView获得焦点时,是否有任何事件可以捕获;这样我就可以让UITextView重新签名firstresponder并再次将其设置为第一响应者。

1 个答案:

答案 0 :(得分:1)

在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的Attributes Inspector。