使用自定义 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