indexPath равен нулю при передаче ячейки от делегата к UITableViewController - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть кнопка addSet в конце каждого раздела моего tableView, она используется как footerView и должна сообщать UITableViewController о том, когда она нажата и в каком разделе. Мой код для пользовательской ячейки табличного представления выглядит следующим образом:

import UIKit

class FooterTableViewCell: UITableViewCell {


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

    }

    var footerDelegate:FooterTableViewCellDelegate?

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

        // Configure the view for the selected state
    }



    @IBAction func addSetIsPressed(_ sender: AnyObject) {

        print("Add Set is pressed")

        footerDelegate?.didAddSetIsPressed(cell:self)
    }



}

protocol FooterTableViewCellDelegate {

    func didAddSetIsPressed(cell:FooterTableViewCell)
}

И в моем TableViewController я реализую его так:

func didAddSetIsPressed(cell: FooterTableViewCell) {

    let indexPath = tableView.indexPath(for: cell)

    print("Index path is \(indexPath)")
}

Я хочу получить indexPath (специально для этого раздела) когда пользователь нажимает на мою кнопку, он всегда возвращает ноль. Что я делаю неправильно?

Чтобы поместить вещи в контекст. Я использую эту ячейку в качестве footerView, поэтому ячейка реализована примерно так:

override func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {

    let cell = tableView.dequeueReusableCell(withIdentifier: "footerCell") as! FooterTableViewCell
    cell.footerDelegate = self


    return cell
}

, поэтому она не реализована в cellForRow в indexPath, как обычно это будет

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Я узнал, как это сделать, чтобы обнаружить участок, в котором была нажата кнопка. Должна быть ссылка на выход в FooterCell и в tableViewController, в viewForFooter в Section, просто добавьте следующую строку

cell.addSetOutlet.tag = section
0 голосов
/ 29 февраля 2020

Дело в том, что вы помещаете ячейку FooterTableViewCell как viewForFooterInSection, поэтому она не используется как UITableViewCell в UITableView, поэтому UITableView не содержит indexPath этого UITableViewCell "Потому что, как я сказал ранее, только вид ячейки используется как footerView "

Вам необходимо добавить кнопку внутри ячейки это отображается на UITableView. «Тот, который возвращается в методе tableView(_:cellForRowAt:)»

На заметке, я заметил, что у вас есть переменная с именем footerDelegate в вашей ячейке, она должна быть weak, чтобы избежать утечки памяти при назначении TableViewController в качестве этого делегата, поэтому UITableViewCell содержит строгое указание на TableViewController, что приводит к утечке памяти, также в иерархии представлений TableViewController содержит UITableView в качестве subView .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...