ios - 如何正确地将 UITextField 添加到 UITableViewCell

标签 ios swift xcode6 storyboard uitextfield

根据我的理解,我正在尝试做的事情应该是非常直接的,但我似乎在这方面遇到了一些麻烦。

我正在尝试将 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/

相关文章:

ios - 如何以编程方式找到 Swift 的版本?

ios - 为什么类型不符合协议(protocol)?

ios - 如何将 UITableViewCell 水平拖动到左侧?

ios - 当 NSUrlSendAssynchronousrequest 操作运行时,选项卡栏应用程序按钮被阻止

swift - 如何在 UITabBar 顶部创建圆角

ios - SKaction 阻止了 touchesBegan 事件

ios - 使用 Swift 在 iOS 中将项目添加到数组

ios - 在运行时以编程方式在应用程序图标集之间切换

ios - 为什么我的核心数据迁移因 EXC_BAD_ACCESS 而崩溃

ios - 缺少推送通知授权 iOS 应用程序提交(我不使用它)