我想要做的事情应该是从我的理解中直截了当,但我似乎遇到了一些麻烦。
我正在尝试将UITextField添加到我的Storyboard中的UITableViewCell,但它只允许我将文本字段作为UIView的子项放置,后者放在表视图单元格中。
即:
UITableViewCell
|__UIView
|__UITextView
我在Swift ViewController中创建了我的IBOutlet并添加了以下功能以使键盘显示在触摸状态
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.nameTextField.becomeFirstResponder()
}
当我运行它时,单元格会响应触摸,但就好像文本视图始终是隐藏的并且永远不会被启用或成为第一个响应者。我假设它与UIView的方式有关,但是我没有成功地将文本视图直接放在表格视图单元格中。
如果有人知道我做错了什么,我会非常感谢你的帮助,
谢谢!
答案 0 :(得分:1)
创建一个自定义UITableView单元格作为xib,并为此创建相应的.swift文件。将textField添加到单元格,并为自定义.swift类中的textField创建IBOutlet。确保在此xib中设置了约束。
在ViewController .swift类中,使func tableView(cellForRowAtIndexPath)返回自定义单元格。
您不必设置firstResponder,因为键盘默认会出现。除非你的单元格基本上只是一个textField,否则让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