在tableView内部创建tableView

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在tableView内部创建tableView相关的知识,希望对你有一定的参考价值。

我创建了带有原型单元的tableView。在每个原型单元内是另一个带有不同原型单元的tableView。我已经将所有这些链接在一起,但是我无法修改最内部的原型单元。这就是为什么。这是相关代码:

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

    

我的externalCell代码看起来像这样:

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()
                

以上是关于在tableView内部创建tableView的主要内容,如果未能解决你的问题,请参考以下文章

在 tableView:cellForRowAtIndexPath 中确定 iPhone 和 iPad 的不同单元格:

iOS Tableview控制器键盘偏移(示例项目内部)

如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?

如何激活按钮以从 tableview 单元格(多个单元格)内部执行操作

在 Swift 中单击 NSObject 内部的 tableView 中的项目时,如何在 NSObject 类中的 UIViewController 上的 UIView 之间正确切换?

将多个图像从本地 JSON 文件加载到 tableview 时 CFNetwork 内部错误