Вопрос о стиле разделителя UITableView - PullRequest
5 голосов
/ 04 июня 2011

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

Я хочу, чтобы разделительные линии были четкими, когда нет ячеек, и серым, когда есть ячейки.

Я использую этот код:

if ([[self.fetchedResultsController fetchedObjects] count] == 0)
{
    self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.routineTableView.separatorColor = [UIColor clearColor];
}
else
{
    self.routineTableView.separatorColor = [UIColor grayColor];
}

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

Ответы [ 3 ]

12 голосов
/ 04 июня 2011

Может быть, вам не хватает этого?

...
else
{
    self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // or you have the previous 'None' style...
    self.routineTableView.separatorColor = [UIColor grayColor];
}

РЕДАКТИРОВАТЬ : Вам нужно это, но не только это ... Согласно документации Apple:

Значением этого свойства является одна из констант стиля разделителя, описанных в UITableViewCell Ссылка на класс Class Reference. UITableView использует это свойство для установки стиля разделителя в ячейке, возвращаемой делегатом в tableView:cellForRowAtIndexPath:.

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

Затем вы должны:

  1. установите его ДО вставленной ячейки

    OR

  2. перезагрузить tableView при добавлении первой ячейки

, что нелегко сделать с NSFetchedResultsController, вы должны поискать в его делегате решение ... или изменить направление, например скрыть tableView до тех пор, пока не получите результат. ..


РЕДАКТИРОВАТЬ 2 : Вы также можете просто добавить это:

[self.tableView reloadData];

но это грязный обходной путь, который просто перезагрузит полный tableView, потеряв большинство преимуществ NSFetchedResultsController ...

1 голос
/ 12 августа 2015

Это изменяет логический флаг того, будет ли разделитель или нет. Поместите это в viewDidLoad:

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

И чтобы убедиться, что вы действительно убрали его, установите для свойства seperatorColor любой цвет фона вида и ячейки:

// If the background is white
self.tableView.separatorColor = [UIColor whiteColor];

Так что, даже если как-то вышеперечисленное как-то не вызывается и разделитель все еще сохраняется - он будет того же цвета, что и то, что позади него, поэтому невидим.

Удачи.

1 голос
/ 21 июля 2015

Обычно я быстро исправляю:

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([tableView respondsToSelector:@selector(setSeparatorStyle:)]) {
        [tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...