Creating tableView inside tableView

五迷三道 提交于 2020-01-24 20:18:06

问题


I've created a tableView with prototype cells. Inside each of these prototype cells is another tableView with different prototype cells. I've linked this all together fine, but I'm having trouble modifying the innermost prototype cells. Here is why. Here is the relevant code:

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

    }

My code for outerCell looks like this:

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
    }


}

See, the main problem is, both these table views work fine and all, but, in the first chunk of code, if I just do something like,

if tableView == self.tableView{
    return cell }
else ...

this won't work, as tableView always seems to be self.tableView.

How can I modify my code so that I can actually impact the text displayed in the inner cell, and the outer cell, in the same block of code?

Also, please note, I know that, based on the example given here, there is no need for these nested cells. I've just simplified the code here to focus on what's important - my actual code has a lot of stuff happening in both the inner and outer cell.

Thank you, any help would be appreciated.


回答1:


you need to first create two different cell classes. In outer class :

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 
}

// other cell class Declare variable

var responseCreateBookingObj : APIServiceSuccessCallback?

// send callback from you want to send

guard let callBack = self.responseCreateBookingObj else{
        return
    }
    callBack(true as AnyObject)

// also do in when user scroll it'll manage

tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath){
 DispatchQueue.main.async {
                    tableView.beginUpdates()
                    }

// do your logic

        DispatchQueue.main.async {
                    cell.contentView.layoutIfNeeded()
                    tableView.endUpdates()
                }

}



来源:https://stackoverflow.com/questions/59743623/creating-tableview-inside-tableview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!