Как получить экземпляр tableView из пользовательской ячейки UITableview? - PullRequest
0 голосов
/ 30 января 2019

У меня есть tableView с пользовательским UITableViewCell, и в этом классе ячеек я хочу получить доступ к tableView, который его держит.Для этой цели я использую cell.superView, который возвращается как ноль.Но то же самое работает нормально, когда я не использую пользовательский UITableViewCell.

Вот мой код,

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? TestTableViewCell
    cell?.textLabel?.text = "Test"
    return cell!
}

class TestTableViewCell: UITableViewCell {

override func awakeFromNib() {
    super.awakeFromNib()
}

func loadDetails() {
    let tableView = self.superview //which is returning nil here
}}

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Как другие говорили вам в комментариях, не очень хорошая идея, что ячейка может обращаться к свойствам tableView, потому что ячейка зависит от таблицы.Это означает, что если вы даете ячейке возможность изменять свойства в табличном представлении, то оба они зависимы, и это может привести к путанице с сотнями ячеек, изменяющими свойства в таблице.Таким образом, это хорошая идея переосмыслить дизайн (т.е. программирование, ориентированное на протоколы).

Но если нет другого жизнеспособного способа, тогда вы можете добавить private weak var (нам нужно private *)1005 *, чтобы гарантировать, что только ячейка может получить к ней доступ, и слабый , потому что мы не хотим сохранения цикла):

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TestTableViewCell
    cell.tableView = tableView
    cell.textLabel?.text = "Test"
    return cell
}

class TestTableViewCell: UITableViewCell {

    private weak var tableView: UITableView?

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    func loadDetails() {
        guard let tableView = tableView else { return }
        // Here you can access your tableView
    }
}
0 голосов
/ 30 января 2019

В UITableViewDelegate, когда ячейка повернута, вы можете узнать, какая UITableView содержит ее.

Инициированный метод:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    // tableView is the UITableView holding the cell.

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