【问题标题】:Hiding keyboard when pressing enter or clicking away on tableView with custom tableViewCell使用自定义 uitableViewCell 按下回车键或单击 uitableView 时隐藏键盘
【发布时间】: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 函数,但我无法让它工作。

【问题讨论】:

标签: ios swift uitableview uitextfield


【解决方案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
        }
    

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2015-05-25
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      相关资源
      最近更新 更多