Изменение заголовка раздела / заголовка раздела UITableView без перезагрузки всего табличного представления - PullRequest
28 голосов
/ 03 декабря 2010

Есть ли способ перезагрузить верхний / нижний колонтитул представления таблицы без вызова [tableView reloadData];

На самом деле, я хочу показать количество ячеек в разделе табличного представления в его нижнем колонтитуле. Табличное представление доступно для редактирования, и я удаляю или вставляю строки, используя

– insertRowsAtIndexPaths:withRowAnimation:
– deleteRowsAtIndexPaths:withRowAnimation:

Кажется, что эти методы не обновляют нижний колонтитул раздела. Странно, когда я вызываю эти методы, метод источника данных табличного представления

- (NSString *)tableView:(UITableView *)table titleForFooterInSection:(NSInteger)section 

вызывается (дважды!), Но оно не обновляет табличное представление новыми значениями !!

Кто-нибудь знает, как решить эту проблему?

Ответы [ 8 ]

35 голосов
/ 31 июля 2013

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

[tableView footerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForFooterInSection:indexPath.section];

аналогично для заголовка:

[tableView headerViewForSection:indexPath.section].textLabel.text = [self tableView:tableView titleForHeaderInSection:indexPath.section];
16 голосов
/ 30 ноября 2015

Это должно работать:

    UIView.setAnimationsEnabled(false)
    tableView.beginUpdates()

    if let containerView = tableView.footerViewForSection(0) {
        containerView.textLabel!.text = "New footer text!"

        containerView.sizeToFit()
    }

    tableView.endUpdates()
    UIView.setAnimationsEnabled(true)
7 голосов
/ 03 декабря 2010

Мне удалось сделать это косвенным путем: я создал UILabel и установил его как верхний / нижний колонтитул раздела.

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    // update sectionFooterView.text    
    return sectionFooterView;
}

- (void)viewDidLoad {
    // create sectionFooterView in Interface Builder, change the frame here
    // use Font-size:15 , BG-Color: clearColor , text-Color: RGB=(97,105,118) 
    // and Text-alignment:Center to look like table view's original footer
    sectionFooterView.frame = CGRectMake(0, 10, 320, 12);
}

Кто-нибудь знает способ сделать это без настройки пользовательского представления нижнего колонтитула?

3 голосов
/ 30 июня 2017

Вот как вы это делаете в Swift 3.0

tableView.beginUpdates()
tableView.headerView(forSection: indexPath.section)?.textLabel?.text = "Some text"
tableView.endUpdates()
3 голосов
/ 27 октября 2014

Вот еще один способ сделать это:

UITableViewHeaderFooterView *headerView=[self.tableView headerViewForSection:1];
CATransition *animation = [CATransition animation];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.type = kCATransitionFade;
animation.duration = 0.35;
[headerView.textLabel.layer addAnimation:animation forKey:@"kCATransitionFade"];
headerView.textLabel.text=[self tableView:self.tableView titleForHeaderInSection:1];
[headerView.textLabel sizeToFit];
2 голосов
/ 31 августа 2011

Проверьте документацию для UITableView или, более конкретно, -reloadSections:withRowAnimation:

1 голос
/ 24 апреля 2018

Вы также можете сделать это таким образом

override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
    switch section {
        case 0:
            return "Some string"
        default:
            return ""
    }
}
0 голосов
/ 08 февраля 2019

Я обнаружил, что текст нижнего колонтитула не обновляется правильно, если текст меняется с заполнения одной строки на несколько строк обратно на одну строкуСброс ширины и высоты этикетки решит эту проблему.

    UIView.setAnimationsEnabled(false)
    textLabel.frame = CGRect(x: textLabel.frame.minX,
                             y: textLabel.frame.minY,
                             width: 0,
                             height: 0)
    tableView.beginUpdates()
    textLabel.text = "Your text"
    textLabel.sizeToFit()
    tableView.endUpdates()
    UIView.setAnimationsEnabled(true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...