根据我的理解,我正在尝试做的事情应该是非常直接的,但我似乎在这方面遇到了一些麻烦。
我正在尝试将 UITextField 添加到我的 Storyboard 中的 UITableViewCell,但是它只允许我将文本字段作为 UIView 的子项放置,后者放置在 TableView 单元格中。
即:
UITableViewCell
|__UIView
|__UITextView
我在我的 Swift ViewController 中创建了我的 IBOutlet 并添加了以下函数来让键盘在触摸时出现
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.nameTextField.becomeFirstResponder()
}
不过,当我运行它时,单元格会响应触摸,但就好像 TextView 总是隐藏的,永远不会被启用或成为 FirstResponder。我假设它在某种程度上与 UIView 有关,但是我未能成功将 TextView 直接放置在表格 View 单元格中。
如果有人知道我做错了什么,我将不胜感激,
谢谢!
最佳答案
创建一个自定义的 UITableView 单元格作为 xib,并为此制作一个相应的 .swift 文件。将 textField 添加到单元格,并在自定义 .swift 类中为 textField 创建一个 IBOutlet。确保在此 xib 中设置了您的约束。
在您的 ViewController .swift 类中,使 func tableView(cellForRowAtIndexPath) 返回您的自定义单元格。
您不必设置 firstResponder,因为键盘会默认出现。除非您的单元格基本上只是一个文本字段,否则让 didSelectRowAtIndexPath 始终调出键盘似乎并不明智。如果由于某种原因单元格总是采取触摸操作,则使用 didSelectRowAtIndexPath,但使用
tableView.cellForRowAtIndexPath(indexPath).textField.becomeFirstResponder()
将 textField 委托(delegate)设置为自定义单元格并将其添加到 CustomTableViewCell.swift 以在按下返回键时关闭键盘:
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return false
}
旁注:除非您取消选择使用硬件键盘的选项,否则键盘不会显示在模拟器中。
这是一个示例项目,其中包含我认为您正在尝试实现的目标: https://mega.nz/#!B1ASDIQT!8-diyv_Fd2H66nb08gs3ObzlQqVHKUUIs4U_BbI6s4s
关于ios - 如何正确地将 UITextField 添加到 UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31773054/