想知道如何以编程方式在 swift 3.0 中对 UITableViewCell 进行子类化?

Posted

技术标签:

【中文标题】想知道如何以编程方式在 swift 3.0 中对 UITableViewCell 进行子类化?【英文标题】:Wondering how I subclass UITableViewCell in swift 3.0 programmatically? 【发布时间】:2016-11-03 05:16:14 【问题描述】:

正如标题所暗示的,我正在尝试以编程方式自定义/子类化 swift 3.0 中的 UITableViewCell 类,并将自定义单元格显示在表格中。

我声明了 UITableViewCell 的以下子类:

import Foundation
import UIKit

class TableViewCellCustom: UITableViewCell 
    var myLabel: UILabel!
    var myButton: UIButton!

    let screenSize = UIScreen.main.bounds

    required init(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)!
    

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) 
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.contentView.backgroundColor = UIColor.blue

        myLabel = UILabel()
        myLabel.frame = CGRect(x: 180, y: 20.0, width: 50.0, height: 20.0)
        myLabel.textColor = UIColor.black
        myLabel.textAlignment = .center
        contentView.addSubview(myLabel)

    

这应该允许我做一个简单的案例,在我指定的单元格的特定位置有一个带有标签的自定义单元格。我有点困惑,但我应该如何将它集成到我委托 UITableView 的 ViewController 中。

目前我的 ViewController 看起来像这样:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 

    var tableView: UITableView  =   UITableView()

    var items: [String] = ["Party at Dougs", "Pillage at the Village", "Meow party at sams"]

    let screenSize: CGRect = UIScreen.main.bounds

    var appTitle: UIView! = nil
    var appTitleText: UILabel! = nil

    override func viewDidLoad() 
        super.viewDidLoad()
        let screenWidth = screenSize.width
        let screenHeight = screenSize.height

        tableView.frame         =   CGRect(origin: CGPoint(x: 0,y :screenHeight*0.12), size: CGSize(width: screenWidth, height: screenHeight*0.88))
        tableView.delegate      =   self
        tableView.dataSource    =   self

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

        self.view.addSubview(tableView)

    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return items.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "td")


        cell.textLabel?.text = items[indexPath.row]


        self.tableView.rowHeight = screenSize.height * 0.15
        return cell
    


我认为我的问题的核心是不确定如何将我的 UITableViewCell 子类连接到我的 TableView。我怎样才能做到这一点?谢谢。

【问题讨论】:

而不是“UITableViewCell.self”使用“TableViewCellCustom.self”注册类。 【参考方案1】:

对于以编程方式创建的自定义单元,不使用 xib,这是您目前的情况,您可以使用以下代码 -

而不是这个

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

使用这条线

tableView.register(TableViewCellCustom.self, forCellReuseIdentifier: "cell")

也代替行

let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "td")

使用这条线

let cell = TableViewCellCustom(style: UITableViewCellStyle.default, reuseIdentifier: "td")

用于使用 xib 创建自定义单元格时。如果您有 xib 用于自定义单元格,请在您的 UITableViewDataSource cellForAtIndexPath 中使用以下代码。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    var cell = tableView.dequeueReusableCellWithIdentifier("td") as? TableViewCellCustom
    if cell == nil 
         tableView.registerNib(UINib(nibName: "TableViewCellCustom", bundle: nil), forCellReuseIdentifier: "td")
         cell = tableView.dequeueReusableCellWithIdentifier("td") as? TableViewCellCustom
     
        cell.textLabel?.text = items[indexPath.row]


        self.tableView.rowHeight = screenSize.height * 0.15
        return cell
    

【讨论】:

以上是关于想知道如何以编程方式在 swift 3.0 中对 UITableViewCell 进行子类化?的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 在 Swift 3.0 中不起作用

在 rootView Swift 3.0 之后以编程方式在 ViewControllers 添加栏按钮项

在 Swift 中以编程方式制作 Segue

如何在 Swift 中对字体进行样式化?

如何以编程方式使用 UITabBar

使用 swift 2 以编程方式使 iOS 设备静音/振动?