gpt4 book ai didi

ios - 如何在我的 viewController 中访问我的自定义 UITableViewCell 的方法

转载 作者:行者123 更新时间:2023-11-28 13:29:46 24 4
gpt4 key购买 nike

我对访问已添加到自定义类的方法有疑问。我创建了一个自定义 UITableViewCell 类并向其添加了两个方法。我试图在我的 View Controller 中访问这些方法,但不知何故不将它们视为选项。我已经在 viewDidLoad() 中运行的函数中注册了单元格,并在运行 cell = UITableViewCell 时在 cellForRowAt indexPath 中创建了一个实例(我认为)。 init(style: .value1, reuseIdentifier: cellId) 作为!自定义单元格 1。在我将单元格出列后,我立即尝试执行 cell.configure(... 但没有看到我的“配置”方法作为一个选项。我做错了什么吗?

这是我的自定义单元格的代码:

import UIKit

class CustomCell1: UITableViewCell {
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

func configure() {
print("Cell got configured")
}
}

这是我的 View Controller :

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let cellId = "cell"

override func viewDidLoad() {
super.viewDidLoad()
setupTableView()
}

func setupTableView() {
let table = UITableView()
table.delegate = self
table.dataSource = self
view.addSubview(table)
table.register(CustomCell1.self, forCellReuseIdentifier: cellId)
table.translatesAutoresizingMaskIntoConstraints = false
table.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
table.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
table.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
table.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}

func numberOfSections(in tableView: UITableView) -> Int {
return 4
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
switch section {
case 0:
return "Value 1 Cell Style | Section: \(section) - 🍔"
default:
return "Default cell header title"
}
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
switch indexPath.section {
case 0:
cell = UITableViewCell.init(style: .value1, reuseIdentifier: cellId) as! CustomCell1
cell.configure(...) // This method isn't working
cell.textLabel?.text = "Title Label \(indexPath.row) - 🍉"
cell.detailTextLabel?.text = "Detail label"
default:
cell = UITableViewCell.init(style: .default, reuseIdentifier: cellId)
cell.textLabel?.text = "Title Label \(indexPath.row) - 🍳"
cell.detailTextLabel?.text = "Detail Label"
}

return cell
}
}


最佳答案

您对 dequeueReusableCell 的使用不正确,

为了使您的代码更好:为自定义和默认单元格使用不同的单元格标识符

let cell1Id = "cell1"        
let defaultCellId = "defaultCell"

然后注册细胞

table.register(CustomCell1.self, forCellReuseIdentifier: cell1Id)
table.register(UITableViewCell.self, forCellReuseIdentifier: defaultCellId)

现在您可以让 dequeueReusableCell 函数来创建和重用单元格:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.section {
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: cell1Id, for: indexPath) as! CustomCell1
cell.configure()
cell.textLabel?.text = "Title Label \(indexPath.row) - 🍉"
cell.detailTextLabel?.text = "Detail label"
return cell
default:
let cell = tableView.dequeueReusableCell(withIdentifier: defaultCellId, for: indexPath)
cell.textLabel?.text = "Title Label \(indexPath.row) - 🍳"
cell.detailTextLabel?.text = "Detail Label"
return cell
}
}

编码愉快!

关于ios - 如何在我的 viewController 中访问我的自定义 UITableViewCell 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com