定制单元格

自定义 UITableViewCell 可以实现非常强大,动态和响应的界面。通过广泛的自定义和结合其他技术,你可以执行以下操作:更新特定属性或界面元素,因为它们更改,动画或绘制单元格中的内容,在用户滚动时有效地加载视频,甚至在从下载时显示图片网络。这里的可能性几乎无穷无尽。下面是一个自定义单元格外观的简单示例。

自定义 UITableViewCell 的示例

本节将介绍基础知识,并希望将其扩展到详细的更复杂的过程,如上所述。

创建自定义单元格

首先,创建一个新的 UITableViewCell 子类(在 Xcode 中创建一个新的 Cocoa Touch 类,并将 UITableViewCell 设置为超类)。下面是子类化后代码的样子。

迅速

class CustomTableViewCell: UITableViewCell {
    static var identifier: String {
        return NSStringFromClass(self)
    }

    var customLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        customLabel = UILabel(frame: CGRect(x: 0, y: 0, width: contentView.frame.width, height: contentView.frame.height))
        customLabel.textAlignment = .center
        contentView.addSubview(customLabel)
    }
}

(可选)在创建新文件时选中“还创建 XIB 文件”以使用 Interface Builder 进行自定义。如果你这样做,请将 customLabel 连接为 @IBOutlet

StackOverflow 文档

在包含 tableViewUIViewController 中,注册新的自定义单元格类(见下文)。请注意,只有在表视图的界面中没有使用 Storyboard 设计单元格时,才需要这样做。

迅速

override func viewDidLoad() {
    super.viewDidLoad()
    
    // Register Cell Class
    tableView.register(CustomTableViewCell.self, forCellReuseIdentifier: CustomTableViewCell.identifier)
}

如果你选择使用 XIB 文件,则改为:registerNib

迅速

// Register Nib
tableView.register(UINib(nibName: CustomTableViewCell.identifier, bundle: nil), forCellReuseIdentifier: CustomTableViewCell.identifier)

现在你的 tableView 知道你的自定义单元格,你可以在 cellForRowAtIndexPath 中将其出列:

迅速

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    // Load the CustomTableViewCell. Make sure the identifier supplied here matches the one from your cell
    let cell: CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier(CustomTableViewCell.identifier) as! CustomTableViewCell

    // This is where the magic happens - setting a custom property on your very own cell
    cell.customLabel.text = "My Custom Cell"

    return cell
}