Получение indexPath родительской ячейки в дочернем TableView - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время у меня есть TableView, который находится внутри прототипа TableViewCell. Чтобы устранить путаницу, иерархия выглядит следующим образом:

TableViewController
--> TableViewCell
    --> TableView

Я пытаюсь получить доступ к indexPath.section, в котором находится TableView, так как для каждой отдельной ячейки внутри TableViewController я хочу отображать разные данные в the TableView.

Мой код в настоящее время выглядит следующим образом:

class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 2
    }

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "todayCell", for: indexPath) as! MyTableViewCell

        // Configure the cell...
        switch indexPath.section {
        case 0:
            cell.label.text = "Today"
        case 1:
            cell.label.text = "Tomorrow"
        default:
            cell.label.text = "Error"
        }

        return cell
    }

}

Для моего TableViewCell:


class MyTableViewCell: UITableViewCell, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var cancelButton: UIButton!
    @IBOutlet weak var completeButton: UIButton!

    var numOfRowsOne = 6
    var numOfRowsTwo = 7



    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code


    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

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

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

        var rows = 0
        if (TableViewController Cell's indexPath.section) == 0 {
            rows = numOfRowsOne
        } else {
            rows = numOfRowsTwo
        }

        return rows
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = todayTableView.dequeueReusableCell(withIdentifier: "activitiesCell", for: indexPath)

        return cell
    }

 }

Спасибо!

1 Ответ

0 голосов
/ 28 апреля 2020

Вы можете получить indexPath, как показано ниже,

if let ip = (self.superview as? UITableView)?.indexPath(for: self), ip.section == 0 {
    rows = numOfRowsOne
} else {
    rows = numOfRowsTwo
}
...