2013-06-04 3 views
0

Моя книга говорит мне, что я должен использовать идентификатор повторного использования UITableView ячейки, как такUITableView: как использовать идентификатор повторного использования ячеек?

//check for reusable cell of this type 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 

//if there isn't one, create it 
if(!cell){ 
    cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault 
         reuseIdentifier: @"UITableViewCell"]; 
} 

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

Что делать, если у нас есть несколько стилей ячеек (т. Е. Разные идентификаторы повторного использования), как мы будем использовать это для создания для нас разных повторно используемых ячеек?

+0

Затем используйте другой идентификатор для создания ячейки :) 'UITableViewCell * cell1 =', 'UITableViewCell * cell2 =' и т. Д. –

ответ

3

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

NSString *cellIdentifier = (indexPath.row % 2 == 0 ? @"EvenCell" : @"OddCell"); 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault 
         reuseIdentifier:cellIdentifier]; 
    if (indexPath.row % 2 == 0) { 
     // set cell properties for even rows 
    } else { 
     // set cell properties for odd rows 
    } 
} 

Использования различных идентификаторов повторного использования гарантирует, что ячейка из четного ряда не используется повторно как ячейка для нечетной строки.

(Этот пример будет работать только если вы не вставить или удалить ячейки. Другим примером может быть разные клетки в зависимости от содержания строки.)

0

indexPath, используйте его. Он содержит вашу строку и раздел, чтобы любые свойства, которые вы хотите установить, могли выбрать случай из строки и раздела и установить его соответствующим образом.