如何正确地将 UITextField 添加到 UITableViewCell

Posted

技术标签:

【中文标题】如何正确地将 UITextField 添加到 UITableViewCell【英文标题】:How to properly add UITextField to UITableViewCell 【发布时间】:2015-10-24 17:16:23 【问题描述】:

根据我的理解,我正在尝试做的事情应该很简单,但我似乎对此有些麻烦。

我正在尝试将 UITextField 添加到我的 Storyboard 中的 UITableViewCell,但是它只允许我将文本字段放置为 UIView 的子项,而后者则放置在表格视图单元格中。

即:

UITableViewCell
|__UIView
   |__UITextView

我在我的 Swift ViewController 中创建了我的 IBOutlet 并添加了以下函数以使键盘出现在触摸时

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)   
    self.nameTextField.becomeFirstResponder()  
 

当我运行它时,单元格会响应触摸,但是好像文本视图总是隐藏并且永远不会启用或成为FirstResponder。我假设它与 UIView 的方式有关,但是我没有成功将文本视图直接放在表格视图单元格中。

如果有人知道我做错了什么,我将不胜感激,

谢谢!

【问题讨论】:

【参考方案1】:

创建一个自定义 UITableView 单元格作为 xib 并为此创建相应的 .swift 文件。在单元格中添加一个 textField 并为自定义 .swift 类中的 textField 创建一个 IBOutlet。确保您的约束已在此 xib 中设置。

在您的 ViewController .swift 类中,使 func tableView(cellForRowAtIndexPath) 返回您的自定义单元格。

您不必设置 firstResponder,因为键盘会默认出现。除非您的单元格基本上只是一个文本字段,否则让 didSelectRowAtIndexPath 始终调出键盘似乎并不明智。如果由于某种原因单元格总是执行触摸操作,则使用 didSelectRowAtIndexPath,但使用

tableView.cellForRowAtIndexPath(indexPath).textField.becomeFirstResponder()

将 textField 委托设置为自定义单元格并将其添加到 CustomTableViewCell.swift 以在按下返回键时关闭键盘:

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

附注:除非您取消选择使用硬件键盘的选项,否则键盘不会显示在模拟器中。

这是一个示例项目,我认为您正在努力实现: https://mega.nz/#!B1ASDIQT!8-diyv_Fd2H66nb08gs3ObzlQqVHKUUIs4U_BbI6s4s

【讨论】:

使用此方法提供与以前相同的结果。对于它的价值,仍然有一个 UIContentView 作为自定义 UITableViewCell 的子项。 func tableView(cellForRowAtIndexPath) 返回 nil 尽管这个“return tableView.cellForRowAtIndexPath(indexPath)!”这是我应该做其他事情的地方吗? 我添加了一个示例项目的链接。希望这可以让您深入了解我之前所说的内容。我能够在不分配 firstResponder 的情况下实现(我希望)您正在寻找的东西。 谢谢,我第一次没有正确实例化 .xib。我现在开始工作了:) 太棒了!很高兴我能帮上忙!

以上是关于如何正确地将 UITextField 添加到 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UI 对象(图像)添加到 UITextView 或 UITextField?

如何异步同步 CoreData 和 REST Web 服务,同时正确地将任何 REST 错误传播到 UI

以编程方式添加带有约束的 UITextField

单击按钮,将UITextField添加到UITableView

如何正确地将多个片段添加到片段过渡?

如何正确地将安全区域插图添加到 UIStackView?