繁体   English   中英

UITableViewCell和UILabel

[英]UITableViewCell and UILabel

我以这种方式将两个自定义UILabel添加到UITableView中:

//in .h file:
NSArray *listaopzioni;
@property (nonatomic, retain) NSArray *listaopzioni;

//in .m file:
self.listaopzioni = [[NSArray arrayWithObjects:@"Strumenti",@"Help & Credits", nil] retain];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    if ([indexPath section]==0) {

        cell.accessoryType = UITableViewCellAccessoryNone;

        UILabel *slogan= [[UILabel alloc] initWithFrame:CGRectMake(0,0,cell.frame.size.width,cell.frame.size.height)];
        slogan.text=[listaopzioni objectAtIndex:indexPath.row];
        slogan.textAlignment=UITextAlignmentCenter;
        slogan.font= [UIFont boldSystemFontOfSize:20];
        slogan.backgroundColor=[UIColor clearColor];
        [cell.contentView addSubview:slogan];
        [slogan release];


    } 
}

所有的炒锅都完美,但是当我上下滑动表格视图时(试图覆盖UINavigationBar下面的单元格),我得到了一个奇怪的效果:文本重叠了,只是使每个字母变粗了。

怎么了?

每当单元格变为可见时,将调用cellForRowAtIndexPath方法。 这就是为什么每次滚动时都会创建标签的原因。 解决方案是在创建单元格时放置创建标签:

 if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

    if ([indexPath section]==0) {

    cell.accessoryType = UITableViewCellAccessoryNone;

    UILabel *slogan= [[UILabel alloc] initWithFrame:CGRectMake(0,0,cell.frame.size.width,cell.frame.size.height)];
    slogan.text=[listaopzioni objectAtIndex:indexPath.row];
    slogan.textAlignment=UITextAlignmentCenter;
    slogan.font= [UIFont boldSystemFontOfSize:20];
    slogan.backgroundColor=[UIColor clearColor];
    [cell.contentView addSubview:slogan];
    [slogan release];


   } 
}

UITableViewCells(在正确使用的情况下)将被重用,这意味着在创建它们之后,它们将保持其创建状态,即标签已添加到您的单元格中。 您需要做的就是利用此单元重用来获得优势:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UILabel slogan;
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
        slogan = [[UILabel alloc] initWithFrame:CGRectMake(0,0,cell.frame.size.width,cell.frame.size.height)];
        slogan.tag = 2121; // Any unique-to-the-cell, positive integer
        slogan.textAlignment=UITextAlignmentCenter;
        slogan.font= [UIFont boldSystemFontOfSize:20];
        slogan.backgroundColor=[UIColor clearColor];
        [cell.contentView addSubview:slogan];
    } else {
        slogan = [cell viewWithTag:2121]; // Must match slogan.tag
    }

    if ([indexPath section]==0) {

        cell.accessoryType = UITableViewCellAccessoryNone;

        slogan.text=[listaopzioni objectAtIndex:indexPath.row];

    } 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM