使用自定义 uitableViewCell 按下回车键或单击 uitableView 时隐藏键盘

Posted

技术标签:

【中文标题】使用自定义 uitableViewCell 按下回车键或单击 uitableView 时隐藏键盘【英文标题】:Hiding keyboard when pressing enter or clicking away on tableView with custom tableViewCell 【发布时间】:2017-05-30 00:07:56 【问题描述】:

我是 Swift 新手,当 textField 位于自定义 tableview 单元格上时,我一直在努力隐藏键盘。我认为问题源于 TableViewCell 类中的 textField 引用,但我不能确定。我什么都试过了,有点迷茫。

我的代码包括:

TableViewCell:

import UIKit

class TableViewCell: UITableViewCell, UITextFieldDelegate

    @IBOutlet weak var userText: UITextField!
    @IBAction func answers(_ sender: UITextField)
    
    

    override func setSelected(_ selected: Bool, animated: Bool)
    
        super.setSelected(selected, animated: animated)
    

    func textFieldShouldReturn(_ textField: UITextField) -> Bool 
        textField.delegate = self
        textField.resignFirstResponder()
        return true
    

和 TableViewController:

import UIKit

class TableViewController: UITableViewController, UITextFieldDelegate

    var textfield = TableViewCell()

    override func viewDidLoad()
    
        super.viewDidLoad()
        let myText = textfield.userText
        textField.resignFirstResponder()
        myText?.delegate = self
    

    func textFieldShouldReturn(_ textField: UITextField) -> Bool 
        self.view.endEditing(true)
        return false
    

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    
        return 3
    

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

        return cell
    

我尝试从两个类中运行 textFieldShouldReturn 函数,但我无法让它工作。

【问题讨论】:

Close ios Keyboard by touching anywhere using Swift的可能重复 你试过 textField.resignFirstResponder 了吗? 【参考方案1】:

删除 UITextFieldDelegate 并从 UITableViewCell 委托 func 然后在UITableViewController->里面设置委托

`override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)as! TableViewCell

    cell.userText.delegate = self
    return cell

然后你想在UITableViewController 中添加textFieldShouldReturn 并返回true 试试这个

【讨论】:

【参考方案2】:

在您的 textFieldShouldReturn 函数中插入 textField.resignFirstResponder

或者在您的viewDidLoad 中插入tableView.keyboardDismissMode = .onDrag.interactive,以便在您滚动时消失

【讨论】:

func textFieldShouldReturn(_ textField: UITextField) -> Bool textField.resignFirstResponder() self.view.endEditing(true) return true 仍然没有为我修复它 我认为这与 textField 在单独的 TableViewCell 类中的引用有关,但我不能确定或如何修复它。 您是否尝试过在拖动时关闭选项?这是现在最常用的,只要向下滑动就可以关闭键盘 我认为拖动时关闭是针对 scrollView 我不确定如何为 tableView 实现它我仍然需要键盘在返回时关闭。【参考方案3】:

在你的 tableView 单元类中添加这个函数,因为你已经在 tableviewCell 的类中声明了委托。

func textFieldShouldReturn(_ textField: UITextField) -> Bool 
      textField. resignFirstResponder() 
        return false
    

【讨论】:

以上是关于使用自定义 uitableViewCell 按下回车键或单击 uitableView 时隐藏键盘的主要内容,如果未能解决你的问题,请参考以下文章

将项目添加到 .plist 并在自定义 UITableViewCell 中显示

自定义UITableViewCell中的UITextField意外发现为零

在自定义 UITableViewCell 中按下 UIButton 时如何获取 indexPathForSelectedRow

默认 UITableViewCell 状态

如何在选择器中传递自定义 UITableViewCell

关于单元重用的自定义 UITableViewCell 约束问题