我创建了一个带有原型单元格的表视图。每个原型单元中都有另一个具有不同原型单元格的表视图。我已经将它们很好地链接在一起,但是我在修改最里面的原型单元格时遇到了麻烦。原因如下。 以下是相关代码:
class ViewController: UIViewController, AVAudioRecorderDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "outerCell") as! outerCell
//would obviously make some modification to cell here, like cell.title = "test" or something
let cell2 = cell.commentTableView.dequeueReusableCell(withIdentifier: "innerCell") as! innerCell
cell2.commentText.text = "sus"
//NEED TO DIFFERENTIATE HERE ON HOW TO KNOW WHICH CELL TO RETURN
//e.g. NEED TO RETURN either cell1 or cell2, depending on the tableView
}
我的外层细胞代码如下所示:
import UIKit
class outerCell: UITableViewCell, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var commentTableView: UITableView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
commentTableView.delegate = self
commentTableView.dataSource = self
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "innerCell", for: indexPath) as! commentCell
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
}
看,主要问题是,这两个表视图都工作正常,但是,在代码的第一块中,如果我只是做类似的事情,
if tableView == self.tableView{
return cell }
else ...
这是行不通的,因为tableView似乎总是self.tableView。
如何修改我的代码,以便我可以在同一代码块中实际影响内部单元格和外部单元格中显示的文本?
另外,请注意,我知道,根据这里给出的示例,不需要这些嵌套单元格。我只是在这里简化了代码,以专注于重要的事情 - 我的实际代码在内部和外部单元格中都发生了很多事情。
谢谢,任何帮助将不胜感激。
您需要首先创建两个不同的单元格类。 在外部类中:
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! SearchPreferredJobTableViewCell
cell.responseCreateBookingObj = { [unowned self] (returnObject) in
DispatchQueue.main.async {
tableView.beginUpdates()
}
// do your logic
DispatchQueue.main.async {
cell.contentView.layoutIfNeeded()
tableView.endUpdates()
} }
return cell
}
其他单元格类 声明变量
var responseCreateBookingObj : APIServiceSuccessCallback?
发送要发送的回调
guard let callBack = self.responseCreateBookingObj else{
return
}
callBack(true as AnyObject)
当用户滚动时也会管理
tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath){
DispatchQueue.main.async {
tableView.beginUpdates()
}
做你的逻辑
DispatchQueue.main.async {
cell.contentView.layoutIfNeeded()
tableView.endUpdates()
}
}