2010-11-12 3 views
2

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

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

Есть ли что-то похожее на повторное использование headerview уже выделенных один раз, как метод 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]; 
} 

ответ

0

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

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

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