想知道如何以编程方式在 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 中不起作用