2011-12-28 3 views
16

У меня есть UITableView с некоторыми разделами, каждый из которых имеет свой собственный заголовок. Когда пользователь нажимает на заголовок раздела, все строки этого раздела рушится. Что я делаю это, я поставил номер строки этой секции 0, а затем вызвать:UITableView reloadSections/reloadData: заголовок становится пустым

[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom]; 

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

Так что я думаю, что есть некоторые проблемы с чертежом таблицы.

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

Когда я обновляю только один раздел, также нет проблем - при обновлении более одного раздела возникает проблема.

Если я использую

[self.tableView reloadData] 

вместо этого, то все работает отлично.

Причина я использую

[self.tableView reloadSections:sections withRowAnimation:UITableViewRowAnimationBottom]; 

потому, что я хочу анимации.

Обертка с beginUpdates/endupdates не работает.

ответ

1

Я нашел работу вокруг - не очень элегантный, но он работает. Вместо того, чтобы предоставить NSIndexSet несколько разделов, я вызываю reloadSections внутри цикла for, используя только один раздел в каждом вызове.

выглядит следующим образом:

for (Element *eleSection in self.gruppenKoepfe) { 
     if (eleSection.type.integerValue == qmObjectTypeFormularSpalte || eleSection.type.integerValue == qmObjectTypeFormularZeile) { 
      [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:nCount] withRowAnimation:UITableViewRowAnimationFade]; 
     } 
     nCount ++; 
    }  
0

У меня была аналогичная проблема, за исключением того, что я пытался удалить/секции вставки, и я обнаружил, что сохранение сильной собственности, указывающий на взгляд весь заголовок (т.е. не просто subview) перестали исчезать во время обновлений раздела.

например. Недвижимость и конкретизации

@property (nonatomic, strong) UIView *headerView;

-(UIView *)headerView { 
    if (!_headerView) { 
    _headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.bounds.size.width, 300)]; 
    // add additional view setup, including subviews 
    } 
    return _headerView; 
} 

И в tableView:(UITableView *)viewForHeaderInSection:(NSInteger)section:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { 
    if (section == theCorrectSection) { 
     return self.headerView; 
    } 
    return nil; 
} 
33

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

У меня была такая же проблема (с чьим-то кодом), и я должен был обмануть это сообщение, когда понял, что код не выполняет повторное использование заголовка таблицы правильно. Исчезновение заголовка состояло в том, что код содержал только UIView, а не UITableViewHeaderFooterView, правильно зарегистрированный и настроенный для повторного использования.

Посмотрите ответ здесь: How to use UITableViewHeaderFooterView?

Мои пустые заголовки ушел, когда я создал многоразовый заголовок.

+1

Это должно быть правильным ответом. Благодаря! :) – RJiryes

+0

Nice catch - кажется настолько очевидным сейчас ... :) – NSTJ

+0

В этом вопросе нет принятого ответа. Который должен следовать? – GeneCode

0

У меня была одна и та же проблема, и это не было из вышеперечисленного. Моя проблема заключалась в том, что я скрывал первый заголовок, и по какой-то причине после более чем 10 перезагрузок заголовок в индексе 2 был скрыт. Когда я устанавливаю headerView.hidden = false, все в порядке.

1

В Swift:

Вам нужно создать класс, это подкласс UITableViewHeaderFooterView и зарегистрировать его в виде таблицы. Затем в viewForHeaderInSection вы делаете let header = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderView") as! YourHeaderView, аналогично тому, что вы делаете для UITableViewCells. Затем верните это значение header.

Обманчивая вещь функция требует возвращения UIView?, когда он действительно нуждается в dequeuedReusableHeaderFooterView или reloadData заставит его исчезнуть

+0

Не могли бы вы предоставить фрагмент кода для этого? Я боролся с этой проблемой в течение нескольких дней, и вы единственный, кто предлагает этот подход (который я считаю правильным) –

+0

Я забыл сказать, пожалуйста –

Смежные вопросы