UITableView не перемещает заголовки разделов - PullRequest
3 голосов
/ 03 июля 2011

Можно ли не использовать заголовки разделов для UITableView со стилем UITableViewStylePlain?

Я создаю AcaniChat, версию нативного приложения для iPhone с открытым исходным кодом , и я хочу сделать заголовки раздела меток времени, но они не должны плавать.

Я знаю, что заголовки разделов не плавают для табличных представлений о стиле UITableViewStyleGrouped, но этот стиль выглядит не так, как я. Должен ли я просто использовать этот стиль и изменить стиль таблицы, чтобы она выглядела так, как я хочу?

Я мог бы сделать это, если смогу выяснить, как сделать https://stackoverflow.com/questions/6564712/nsfetchedresultscontroller-nsdate-section-headers.

Ответы [ 4 ]

2 голосов
/ 11 сентября 2011

Интересной особенностью UITableViewStyleGrouped является то, что tableView добавляет стиль к ячейкам , а не к TableView.

Стиль добавляется в ячейки как backgroundView как класс с именем UIGroupTableViewCellBackground, который обрабатывает рисование различного фона в соответствии с положением ячейки в разделе.

Таким образом, очень простым решением будет использовать UITableViewStyleGrouped, установить backgroundColor таблицы в clearColor и просто заменить backgroundView ячейки в cellForRow:

cell.backgroundView = [[[UIView alloc] initWithFrame:cell.bounds] autorelease];
1 голос
/ 04 марта 2014

Теперь это можно сделать двумя быстрыми и простыми шагами (только для iOS 6):

  1. Измените свой стиль UITableView на UITableViewStyleGrouped. (Вы можете сделать это из Storyboard / NIB или через код.)

  2. Затем установите фоновое представление вашего табличного представления на пустое представление, например, так [в любом методе, таком как viewDidAppear , или даже в методе cellForRow (хотя я бы предпочел бывший)].

yourTableView.backgroundView = [[UIView alloc] initWithFrame:listTableView.bounds];

Вуаля, теперь у вас есть табличное представление - но без заголовков плавающей секции. Заголовки разделов теперь прокручиваются вместе с ячейками, и проблемы с пользовательским интерфейсом решены!

Это работает, потому что UITableViewStyleGrouped, кажется, теперь работает, добавляя фоновое представление к простому UITableView, но без заголовков плавающей секции. [Нотабене Ранее в iOS 6 отдельные фоновые изображения были добавлены в UITableViewCell's.]

Попробуйте и дайте мне знать, как это происходит. Удачного кодирования :)

РЕДАКТИРОВАТЬ: для iOS 7 просто измените стиль представления таблицы на « UITableViewStyleGrouped » и измените цвет оттенка представления на «очистить цвет».

1 голос
/ 03 июля 2011

Полагаю, либо вам придется использовать два вида пользовательских tableCells, либо полностью пропустить просмотр таблицы и работать над простым просмотром прокрутки для достижения такого стиля.

0 голосов
/ 04 марта 2014

Вы можете достичь этого, поместив заголовки в свои собственные разделы. Сначала удвойте количество секций. Затем для разделов с четными номерами верните заголовок в качестве заголовка и ноль в качестве количества строк. Для нечетных разделов верните nil для заголовка.

Если вы используете NSFetchedResultsController, это будет выглядеть примерно так:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.fetchedResultsController.sections.count * 2;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if ((section % 2) == 0)
    {
        section /= 2;

        id<NSFetchedResultsSectionInfo> sectionInfo = self.fetchedResults.sections[section];
        return sectionInfo.name;
    }
    else
    {
        return nil;
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if ((section % 2) == 0)
    {
        return 0;
    }
    else
    {
        section /= 2;

        id<NSFetchedResultsSectionInfo> sectionInfo = self.fetchedResults.sections[section];
        return sectionInfo.numberOfObjects;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ((indexPath.section % 2) == 0)
    {
        return nil;
    }
    else
    {
        indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section/2];
        id object = [self.fetchedResultsController objectAtIndexPath:indexPath];

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