То, что вы делаете, звучит так: в вашем методе cellForRowAtIndexPath вы настраиваете ваши UITableViewCells с некоторыми метками в них, и каждый раз вы создаете метки с нуля.Что вы должны сделать, это настроить метки, если вы создаете новую ячейку, а затем установить значения для меток вне этой области, чтобы полностью использовать возможность повторного использования ячеек табличного представления для повышения производительности прокрутки табличного представления.
Ключевым методом является -viewWithTag:
, который вместе со свойством tag
в UIView можно использовать для поиска определенного подпредставления.
Небольшой пример кода:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"MyCellIdentifier";
UITableViewCell *cell = (WHArticleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *firstLabel = nil;
UILabel *secondLabel = nil;
UILabel *thirdLabel = nil;
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
firstLabel = [[[UILabel alloc] initWithFrame: CGRectMake(0.0, 0.0, 20.0, 20.0)] autorelease];
firstLabel.tag = 1;
[cell addSubview:firstLabel];
secondLabel = [[[UILabel alloc] initWithFrame: CGRectMake(20.0, 0.0, 20.0, 20.0)] autorelease];
secondLabel.tag = 2;
[cell addSubview:secondLabel];
thirdLabel = [[[UILabel alloc] initWithFrame: CGRectMake(40.0, 0.0, 20.0, 20.0)] autorelease];
thirdLabel.tag = 3;
[cell addSubview:thirdLabel];
}
else
{
firstLabel = (UILabel *)[cell viewWithTag:1];
secondLabel = (UILabel *)[cell viewWithTag:2];
thirdLabel = (UILabel *)[cell viewWithTag:3];
}
firstLabel.text = @"First Label's Text Here";
secondLabel.text = @"Second Label's Text Here";
thirdLabel.text = @"Third Label's Text Here";
return cell;
}