Заголовок раздела в uitableview - reusidentifier? - PullRequest
2 голосов
/ 12 ноября 2010

У меня есть таблица с настроенными заголовками для разделов. В дополнение к этому, я реализовал функцию свертывания, так что при касании заголовка все неадресованные разделы уменьшаются, а адресный раздел расширяется. Я понял это, используя UIButtons в качестве фона. Кроме того, кнопки имеют разные цвета и текст в зависимости от их состояния (развернуто или не развернуто).

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

Есть ли что-нибудь похожее на повторное использование заголовков, уже выделенных один раз, как метод reusIdentifier для UITableViewCells?

Или есть лучший подход?

Предварительное выделение кнопок для сохранения их в массиве не помогло мне ...

Вот код:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 40)];
[button setShowsTouchWhenHighlighted:NO];
[button setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal];
[button addTarget:self action:@selector(collapse:) forControlEvents:UIControlEventTouchUpInside];
button.tag  = section;

[button setAdjustsImageWhenHighlighted:NO];
button.backgroundColor = [UIColor colorWithRed:63.0f/255.0f  green:154/255.0f blue:201/255.0f alpha:1.0f];


[button.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:14.0]];
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
if (section == 0) {
//  [button setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
[button setTitle:@"  Newsroom" forState:UIControlStateNormal];
} else {
    [button setTitle:[NSString stringWithFormat:@"    Sektion %d", section] forState:UIControlStateNormal];

}


if (section == mySection) {
    [button setBackgroundImage:[UIImage imageNamed:@"sectionHeader_active.png"] forState:UIControlStateNormal];
    [button setBackgroundImage:[UIImage imageNamed:@"sectionHeader_active.png"] forState:UIControlEventTouchUpInside];
    [button.titleLabel  setTextColor:[UIColor whiteColor]];

} else {
    [button setBackgroundImage:[UIImage imageNamed:@"sectionHeader_inactive.png"] forState:UIControlStateNormal];
    [button setBackgroundImage:[UIImage imageNamed:@"sectionHeader_inactive.png"] forState:UIControlEventTouchUpInside];

    [button.titleLabel  setTextColor:[UIColor colorWithRed:96.0f/255.0f  green:96/255.0f blue:97/255.0f alpha:1.0f]];

}

return [button autorelease];
}

1 Ответ

0 голосов
/ 24 января 2012

Я также реализовал сворачивающуюся таблицу разделов, используя представления заголовков UIButton. Я обнаружил, что это было глупо пытаться кешировать и повторно использовать представления, потому что вы не знаете, когда с ними завершился UITableView (у меня были сбои).

Я рекомендую реализовать изменение вашего состояния путем: обновления вашей модели данных; выполнение вставки / удаления всех строк, чтобы выполнить свертывание / развертывание; затем выполняем [tableView reloadData], который вызовет viewForHeaderInSection, где вы используете состояние вашей модели данных для возврата соответственно отформатированного представления uibutton.

...