如何将子视图添加到 UITableViewCell

Posted

技术标签:

【中文标题】如何将子视图添加到 UITableViewCell【英文标题】:How to add a subview to a UITableViewCell 【发布时间】:2017-01-13 20:39:28 【问题描述】:

我正在使用表格视图制作待办事项计划器。当用户在输入任务后按下回车键时,任务左侧应该会出现一个按钮。

我的 ViewController 类中的 textFieldShouldReturn 方法添加了按钮,但并不总是在屏幕的左上角。我是这样设置的:

func textFieldShouldReturn(_ textField: UITextField) -> Bool 


    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as! TextInputTableViewCell

        self.view.addSubview(cell.cellButton) // puts a button in a wrong location, button doesn't respond to any action
        cell.addSubview(cell.cellButton)
        tableViewData.append(textField.text!)
        lastItem = tableViewData.count
        print(tableViewData)
        print(lastItem)

    self.tableView.reloadData() //update row count and array count
    textField.resignFirstResponder()
    return true

self.view.addSubview(cell.cellButton)

向视图添加一个按钮,但该按钮没有出现在正确的位置,(我尝试使用情节提要移动位置,但它没有做任何事情)。另外,按钮不会响应其相应的点击动作,这是在子类中声明的。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

    let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell")! as! TextInputTableViewCell
    cell.textField.delegate = self
    ...
   return cell

感谢任何帮助。如果我不太清楚,请告诉我

【问题讨论】:

【参考方案1】:

你没有抓住这一行的正确单元格:

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as! TextInputTableViewCell

您基本上是在告诉系统只给您一个单元格。您需要弄清楚实际返回的文本字段,并抓取包含该文本字段的单元格,然后将您的子视图添加到正确的单元格中。这样做的方法是用行号标记您的文本字段。

它在第一个示例中有效,因为您在 cellForRow 中,因此您确实拥有正确的单元格。

【讨论】:

嗯,您能否提供一些代码/伪代码来说明如何执行此操作?我基本上只对所有行使用一个 textField 实例,这似乎工作正常 分享更多代码?我认为您不正确,每个单元格都应该有自己的文本字段实例。您可能缺少对细胞如何重复使用以及它们如何工作的关键理解。尝试在你的委托方法中放置一个断点,你会发现 tectfields 是不同的。【参考方案2】:

如果您在 .xib 或故事板文件中对齐按钮,然后将其隐藏直到您需要它出现,会不会更容易?

【讨论】:

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

如何在编辑模式下将子视图添加到 UITableViewCell 并调整其大小?

将子视图添加到静态 UITableViewCell 不起作用

选择时将子视图添加到 UITableViewCell

将子视图添加到 UITableViewCell 问题

将子视图添加到 UITableViewCell contentView 的正确方法

是否不可能将子视图添加到我的 UITableViewCell 的 contentView 并使其宽度与 contentView 相等?