ячейки формата iPhone + UITableView +
-
05-07-2019 - |
Вопрос
Я использую следующий метод в своем приложении:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row == 0)
{
cell.contentView.backgroundColor = [UIColor lightGrayColor];
cell.contentView.alpha = 0.5;
}
}
Когда я запускаю приложение, в моей таблице 7 строк. В соответствии с вышеуказанной функцией должна форматироваться только ячейка первой строки (номер строки 0) (из-за условия if).
Ячейка 1-й строки (номер строки 0) отформатирована правильно (согласно желаемому результату). Но если я прокручиваю таблицу вниз, еще одна ячейка отображается в формате: ячейка в строке номер 5.
Почему так? Р>
Решение
Я согласен с ответом Владимира. Тем не менее, я также считаю, что вы должны придерживаться другого подхода. Р>
В текущей ситуации вы часто форматируете ячейку, так как метод вызывается при каждой прокрутке, и это приводит к неоптимальной производительности.
Более элегантное решение состоит в том, чтобы форматировать 1-ю строку иначе, чем другие, только один раз. : когда вы создаете свои клетки.
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier;
if(indexPath.row == 0)
CellIdentifier = @"1stRow";
else
CellIdentifier = @"OtherRows";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell==nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
if(indexPath.row == 0){
cell.contentView.backgroundColor = [UIColor lightGrayColor];
cell.contentView.alpha = 0.5;
// Other cell properties:textColor,font,...
}
else{
cell.contentView.backgroundColor = [UIColor blackColor];
cell.contentView.alpha = 1;
//Other cell properties: textColor,font...
}
}
cell.textLabel.text = .....
return cell;
}
Другие советы
Я думаю, причина в том, что TableView повторно использует уже существующие ячейки и отображает их, если это возможно. Что здесь происходит - когда таблица прокручивается и строка 0 становится невидимой, то соответствующая ячейка используется для новой отображаемой строки. Поэтому, если вы повторно используете ячейки, вы должны сбросить их свойства:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == 0) {
cell.contentView.backgroundColor = [UIColor lightGrayColor];
cell.contentView.alpha = 0.5; }
else
{
// reset cell background to default value
}
}