Как вручную вызвать метод UITableView titleForHeaderInSection?

Довольно простой вопрос, но я просто не могу заставить его работать правильно. Мне нужно иметь доступ к значению заголовка строки раздела, когда щелкнута ячейка в этом разделе.

Мои первые попытки не сработали:

[tableView titleForHeaderInSection:1];

Причина, по которой я думал, что это сработает, заключается в том, что я также использую это:

[tableView cellForRowAtIndexPath:indexPath];

Который отлично работает. Я реализую делегат, но все еще получаю предупреждение о том, что UITableView может не отвечать на titleForHeaderInSection. А потом он вылетает из-за нераспознанного селектора.

Все, что мне нужно сделать, это передать строковое значение заголовка ячейки и заголовка раздела в следующее представление.

Что я делаю неправильно? Есть ли лучший подход? Спасибо


person Steven S.    schedule 27.06.2011    source источник


Ответы (4)


titleForHeaderInSection — это метод протокола UITableViewDataSource, который реализован клиентским классом, а не UITabelView.

Таким образом, вы не можете вызвать titleForHeaderInSection на своем экземпляре UITableView.

person Jhaliya - Praveen Sharma    schedule 27.06.2011
comment
Это сработало отлично! Я не знал, что этот метод был частью другого протокола, спасибо за понимание. - person Steven S.; 27.06.2011

Вы можете получить доступ к titleForHeaderInSection из UITableViewController и UITableView: вам просто нужно следовать цепочке объектов.

Пример, начиная с контроллера представления:

class TableViewController: UITableViewController {

    func titleForHeaderInSection(indexPath:NSIndexPath) -> String? {
        if let tableView = self.tableView {
            if let dataSource = tableView.dataSource {
                if dataSource.respondsToSelector("tableView:titleForHeaderInSection:") {
                    return dataSource.tableView!(tableView,
                                                 titleForHeaderInSection:indexPath.row)
                }
            }
        }
        return nil
    }
}
person SwiftArchitect    schedule 16.01.2016

как насчет:

[tableView titleForHeaderInSection:indexPath.section];

person Grady Player    schedule 27.06.2011
comment
предполагая, что ваш источник данных не изменился до того, как ваша таблица начала загружаться, и вы запрашиваете эти данные, все должно быть в порядке. - person Grady Player; 27.06.2011

Вызов вручную titleForHeaderInSection у меня не работал.

Но простой [tableView reloadData] сделал свое дело.

Надеюсь это поможет

person Titouan de Bailleul    schedule 26.11.2012