Swift Custom Cell 创建你自己的带有标签的 Cell

Posted

技术标签:

【中文标题】Swift Custom Cell 创建你自己的带有标签的 Cell【英文标题】:Swift Custom Cell creating your own Cell with labels 【发布时间】:2015-10-07 23:36:05 【问题描述】:

我刚开始使用 Swift 作为编程语言,但在自定义单元格方面遇到了问题。

当我尝试创建自定义单元格,然后继续尝试按照我需要的方式设计它们(将样式设置为自定义)时,一切看起来都很好。现在我不知道如何将特定数据放入其中,因为我发现的所有教程都使用样式选项“基本”,它们只有一个文本标签来分配数据。

现在对我来说,当我将标签“控制拖动”到我的代码中时,我会给它们特定的名称,例如“dateLabel”或“sourceLabel”,以便正确插入数据。

现在我不确定,也找不到任何有效的答案,关于如何召回我的定制标签,以便我可以将我的数据分配给他们......

也许你们中的某个人可以帮我解决这个问题,因为我很确定这是一个简单的问题,但我找不到任何资源^^

希望字体不要太小,我只是想让你们看看我得到的错误。

我使用以下教程作为指导方针,因为它是唯一一个与这个人一样工作的教程:https://www.youtube.com/watch?v=0qE8olxB3Kk

我检查了标识符,他设置正确,我在网上找不到任何关于如何正确引用我自己的标签及其正确名称的信息。

任何帮助将不胜感激:)

【问题讨论】:

要使用“自定义”单元格,您还需要创建UITableViewCell 的自定义子类,然后您将标签挂接到故事板中并将单元格原型的类设置为。您看到的错误告诉您,您正在创建并从该方法返回的普通 UITableViewCell 没有与您创建的自定义标签匹配的属性。 dequeue as! 你需要告诉它这是你的自定义单元格类。也许寻找关于自定义单元子类的教程。顺便说一句,相同的基本概念和流程也适用于制作自定义 UICollectionView 单元格。 【参考方案1】:

尝试以下步骤:

    创建一个扩展UITableViewCell 的自定义表格视图单元格类。在我的示例中,自定义表格视图单元格类称为MyCustomTableViewCell

    更新情节提要的单元格,使其使用您的自定义表格视图单元格类。转到Identity Inspector 并将 Class 值设置为自定义表格视图单元格类的名称。

    更新情节提要的单元格并为其赋予重用身份值。转到 Attributes Inspector 并设置 Identifier 值。例如,我为单元格指定了标识符值MyCustomCell

    控制将单元格的标签拖动到新的自定义表格视图单元格类(即MyCustomTableViewCell 类)中。


完成上述步骤后,当您在tableView:cellForRowAtIndexPath: 方法中dequeue 单元格时,您将能够访问标签。正如下面的代码 sn-p 所示,您需要:1) 使用您在上述步骤中建立的 重用标识符 获取单元格,以及 2) 转换为您的自定义表格视图单元格类。

例如,如果您将其命名为MyCustomTableViewCell,您的自定义表格视图单元格将如下所示。这是在您创建了类并且控件将您的标签拖到此类之后。

class MyCustomTableViewCell: UITableViewCell     
    @IBOutlet weak var categoryLabel: UILabel!
    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var sourceLabel: UILabel!
    @IBOutlet weak var titleLabel: UILabel!
 

您的ViewController 可能如下所示:

// NOTE: I subclassed UITableViewController since it provides the
// delegate and data source protocols. Consider doing this.
class ViewController: UITableViewController 

    // You do NOT need your UILabels since they moved to your
    // custom cell class.

    // ...
    // Omitting your other methods in this code snippet for brevity.
    // ... 

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

        // Use your cell's reuse identifier and cast the result
        // to your custom table cell class. 
        let article = tableView.dequeueReusableCellWithIdentifier("MyCustomCell", forIndexPath: indexPath) as! MyCustomTableViewCell

        // You should have access to your labels; assign the values.
        article.categoryLabel?.text = "something"            
        article.dateLabel?.text = "something"            
        article.sourceLabel?.text = "something"            
        article.titleLabel?.text = "something"            

        return article
    

【讨论】:

假设我们不创建自定义表格视图单元格类,只使用默认的 UITableViewCell 类并使用标签从自定义单元格中获取标签!是否可以 ?? M 出现致命错误:在展开 Optional 值时意外发现 nil。请澄清这一点。 (注意* - 通过创建自定义单元格,我做到了并且工作正常) 我不太确定你在问什么。默认的UITableViewCell 具有三个字段:textLabeldetailTextLabelimageView。如果您使用默认值,则无需使用自定义单元格类。

以上是关于Swift Custom Cell 创建你自己的带有标签的 Cell的主要内容,如果未能解决你的问题,请参考以下文章

swift 之 纯代码创建 cell

Swift 2.0 自定义cell和不同风格的cell

Swift: 是用Custom Segue还是用Transition动画

TableView Cell里面的swift CollectionView

如何处理TextCield的shouldChangeCharactersIn,如果它位于TabelViewControler的Custom Cell中

以编程方式从 collectionView Cell didSelectItemAt 推送到新的 ViewController - swift