在表格视图的特定单元格中创建文本字段

Posted

技术标签:

【中文标题】在表格视图的特定单元格中创建文本字段【英文标题】:Creating text field in specific cells of tableview 【发布时间】:2016-06-28 08:45:59 【问题描述】:

我想在表格视图的特定单元格中插入文本字段。我有一个包含 12 个字符串的数组(其中 3 个是空格)。表格视图中的那些空白单元格,我想在其中创建一个文本字段,以便用户可以输入那些空槽。但是我无法仅在那些空白的插槽中创建文本字段。我该怎么做?

    var items = ["Apple", "Fish", "Dates", "Cereal", "Ice cream", "Lamb", "Potatoes", "Chicken", "Bread", " ", " "," "]

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("cellFruit", forIndexPath: indexPath)

    if (items[indexPath.row] == " ") 
        cell.textLabel?.text = items[indexPath.row]
        let collar = UIColor.init(red: 175, green: 189, blue: 212, alpha: 0.4)
        cell.backgroundColor = collar
        return cell

    
    else 
        cell.textLabel?.text = items[indexPath.row]
        let coL = UIColor.init(red: 59, green: 89, blue: 152, alpha: 0.2)
        cell.backgroundColor = coL
        return cell

    


这是我重新加载单元格的方法。现在文本字段正在显示,但它开始显示在字符串为非空格的单元格中。

     func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) 
    if (sourceIndexPath.row != destinationIndexPath.row)
        let temp = items[sourceIndexPath.row]
        items.removeAtIndex(sourceIndexPath.row)
        items.insert(temp, atIndex: destinationIndexPath.row)

    
    tableView.reloadData()

【问题讨论】:

到目前为止你有什么?请粘贴一些代码.. 先获取数组值,检查值是否为空。如果它为空,则将您的文本字段添加到单元格。否则添加字符串值。 @user1941284 我刚刚发布了代码。 items 是我用来创建行的数组的名称。 @Signare 我知道:P 事情是我不知道如何在 if 语句后数组为空时在单元格中添加文本字段 在 if 循环中,添加这一行。 cell.contentView.addSubview(YourTextField) 【参考方案1】:

例如,您可以使用单元格标识符“default”和“wTextfield”创建两个单元格(或使用一个单元格init(style: UITableViewCellStyle, reuseIdentifier: String?))。一个单元格默认,第二个单元格将有文本字段。如果它们不是来自情节提要,则将它们注册到viewDidLoad(如果来自情节提要则不需要):

override func viewDidLoad()
        
    super.viewDidLoad()
    //some setup

    tableView.registerClass(MyCell, forCellReuseIdentifier: "default")
    tableView.registerClass(MyCell, forCellReuseIdentifier: "wTextfield")

然后,当您在cellForRowAtIndexPath 方法中设置单元格时,您可以选择适合您的单元格:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

    var cellId = "default"
    if items[indexPath.row] == " " cellId = "wTextfield"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as! MyCell

    //set up your cell now
    return cell

【讨论】:

我能够成功创建文本字段。但现在还有另一个问题。每次滚动单元格时,带有文本字段的单元格看起来不错,但文本字段也开始显示在不应该显示的单元格上。我已经发布了我的代码,其中重新加载了 tableview。你能指导我哪里错了吗? @OsaamaShehzad 你是从删除的答案中实施我的解决方案还是解决方案? 我从已删除的答案中实施了解决方案。我认为这有问题:/在您的解决方案中,我是否以与上一个答案相同的方式实现文本字段 @OsaamaShehzad 在我的解决方案中,您应该区分有文本字段和没有文本字段的情况。如果您使用故事板(我相信),您应该在表格视图中制作两个原型单元格,并按照我的回答正确设置它们cellIdentifier。当然,您应该为此单元创建自定义 UITableViewCell 类(两者都可以是一个;我假设它的名称为 MyCell)。有很多关于UITableView 以及如何在其中添加原型单元的教程,如果您在这一步遇到问题,请搜索它们。之后,您可以使用我的回答中的cellForRowAtIndexPath 模板 我刚刚制作了另一个原型单元,并按照您的建议进行了操作。现在工作得更好了。除了它被覆盖的事实。它不允许我在单元格中擦除和重写。我该如何解决?【参考方案2】:

您应该在 tableView:cellForRowAtIndexPath 函数中检查您的字符串值,并根据您的字符串值显示/隐藏文本字段。

【讨论】:

如何在决定是否显示之前首先创建一个文本字段?我无法弄清楚这样做的代码。 ://

以上是关于在表格视图的特定单元格中创建文本字段的主要内容,如果未能解决你的问题,请参考以下文章

我将如何在 UITableView 中创建文本字段

如何在 ios 中创建可扩展的表格视图?

具有多个文本字段的多个单元格到核心数据属性

如何在 tableview 中创建一个具有多个字段的单元格?

指定“左侧详细信息”表格视图单元格的文本

文本在表格单元格中重叠自身 SWIFT