Как очистить UILabels внутри UITableViewCells? - PullRequest
1 голос
/ 07 апреля 2011

Я поместил несколько UILabel внутри каждой ячейки в UITableView вместо одного cell.textLabel.text. Затем я использую reloaddata, чтобы поставить новые метки. Как мне избавиться от старых ярлыков?

edit: Если я поместил 5 ярлыков в ячейку, а затем перезагрузил ячейку, используя только 2 ярлыка, осталось еще 3 ярлыка с того момента, когда я последний раз вызывал cellForRowAtIndexPath. Если я использую viewWithTag, как сказал Голдин, я могу повторно использовать старые ярлыки, но могу ли я удалить ярлыки, которые мне не нужны, из памяти?

редактирование: это мой метод

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell";</p> <pre><code>MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[MyTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(j*50.0, 0, 49.0,logicTable.rowHeight)] autorelease]; label.tag = 1; label.text = [NSString stringWithFormat:@"ABC"]; label.textAlignment = UITextAlignmentCenter; label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight; [cell.contentView addSubview:label]; return cell;

}

1 Ответ

3 голосов
/ 07 апреля 2011

То, что вы делаете, звучит так: в вашем методе 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...