Таблица просмотра Cell Recreation, когда Cell загружается с XIB - PullRequest
3 голосов
/ 09 сентября 2011

В моей таблице я загружаю ячейку Custome с Xib, для каждой записи CellForIndexPath ячейка воссоздается.как избежать воссоздания клетки ??

Я новичок в IPhone, пожалуйста, помогите мне.

Ответы [ 2 ]

4 голосов
/ 09 сентября 2011

Вы можете использовать стандартные методы для кэширования ранее созданных ячеек. В вашем методе - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath вы должны создать ячейки, используя следующий подход:

static NSString *CellIdentifier = @"YourCellIdentifier";
cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    // create (alloc + init) new one
    [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];        
    cell = myCell;
    self.myCell = nil;
}
// using new cell or previously created

Не забывайте, что вы будете хранить в памяти объекты для всех видимых ячеек. Когда вы прокрутите таблицу, эти ячейки будут использованы повторно.

Например, если у вас есть 10 видимых ячеек, то ячейка будет == ноль в 10 раз, и вы будете выделять + инициализировать их. Когда вы прокрутите вниз, будет создана еще одна ячейка (так как будет видно 11 ячеек), и для 12 ячеек вы будете использовать ячейку, созданную для первой ячейки.

Как сказал @rckoenes, не забудьте установить одинаковые CellIdentifier ячейки в IB.

Надеюсь, мне было ясно.

1 голос
/ 09 сентября 2011

когда вы загружаете представление из Nib, оно будет выделять память каждый раз, когда вызывается cellForRowAtIndexPath, так что это лучший способ просто перерисовать ячейку вместо выделения памяти каждый разМожет помочь пример, приведенный ниже.

Параметрический ящик для метки в пользовательской ячейке.как

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
lblusername=[[UILabel alloc]initWithFrame:CGRectMake(70, 10, 150, 25)];
    lblusername.backgroundColor=[UIColor clearColor];
    lblusername.textColor=[UIColor colorWithRed:33.0/255.0 green:82.0/255.0 blue:87.0/255.0 alpha:1.0];
    [contentview addSubview:lblusername];
    [lblusername release];
 }
return self;
}

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

static NSString *CellIdentifier = @"Cell";

LeaderboardCustomeCell *cell = (LeaderboardCustomeCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[LeaderboardCustomeCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.lblusername.text=@"Hello";
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...