如何在 Swift 2.0 中使用标签将 TextField 添加到 Cell

Posted

技术标签:

【中文标题】如何在 Swift 2.0 中使用标签将 TextField 添加到 Cell【英文标题】:How to add TextField to Cell using tags in Swift 2.0 【发布时间】:2015-11-23 15:52:03 【问题描述】:

我希望表格的第一行有一个带有 TextField 的单元格(在我的例子中名为 FindTextField)。 我实现的方式(见下面的代码),因为单元格被重用,如果单元格列表向下滚动,那么更多的单元格将被分配给 TextField。我想知道如何使用标签或任何其他允许强制只有第一行才有 TextField 的东西,即使用户一直向下滚动然后向上滚动。

现在,这里是代码:

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

        let cell = tableView.dequeueReusableCellWithIdentifier("identifier",
            forIndexPath: indexPath) as UITableViewCell

        if indexPath.row == 0 
            FindTextField.frame = CGRectMake(74, 4, cell.bounds.width - 78 , cell.bounds.height - 8)
            FindTextField.hidden = false
            FindTextField.placeholder = "Find"
            FindTextField.font = UIFont.systemFontOfSize(20)
            FindTextField.borderStyle = UITextBorderStyle.RoundedRect
            FindTextField.autocorrectionType = UITextAutocorrectionType.No
            FindTextField.keyboardType = UIKeyboardType.Default
            FindTextField.returnKeyType = UIReturnKeyType.Done
            FindTextField.clearButtonMode = UITextFieldViewMode.WhileEditing;
            FindTextField.contentVerticalAlignment = UIControlContentVerticalAlignment.Center
            FindTextField.delegate = self
            FindTextField.autocapitalizationType = .AllCharacters
            cell.contentView.addSubview(FindTextField)
            cell.imageView?.image = UIImage(named: "menu_find.png")
            cell.textLabel?.hidden = true
        

        cell.textLabel!.text = StationsChatList[indexPath.row]
        cell.textLabel!.font = UIFont.systemFontOfSize(24)
        cell.textLabel?.textColor = UIColor.whiteColor()
        cell.textLabel?.backgroundColor = UIColor.blackColor()
        cell.backgroundColor = UIColor.blackColor()

        cell.layer.borderWidth = 1.0
        cell.layer.borderColor = UIColor.darkGrayColor().CGColor

        return cell


【问题讨论】:

为什么要使用标签?创建两个自定义单元格,一个带有UITextField,一个没有。将带有 indexPath 0 的文本字段的单元格和所有其他 indexPaths 的没有文本字段的单元格出列。 【参考方案1】:

您可以将tag 分配给您的textField,然后再访问它。当row != 0 简单地隐藏它。这就是我要说的:

if cell.viewWithTag(1001) == nil  // init your text field
  FindTextField.frame = ...
  FindTextField.tag = 1001 // or whatever you want
  ...

cell.viewWithTag(1001)?.hidden = indexPath.row != 0
...

还有另一种方法 - 在您的单元格中实现prepareForReuse() 方法并手动隐藏FindTextField(它将为每个单元格隐藏)。稍后在cellForRow 中使其可见,如果row == 0

【讨论】:

以上是关于如何在 Swift 2.0 中使用标签将 TextField 添加到 Cell的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 2.0 中获取错误消息?

如何在 swift 2.0 中使用 catch 概念

如何在 Swift 2.0 中正确解开这些 CLPlacemarks?

如何使用 swift 2.0 制作 http post json 请求参数

在集合视图中显示两个不同的单元格 - Swift 2.0 iOS

如何从 Swift 2.0 中获取子数组