开发者

UITable view overlapping

- (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];
    }

    // Configure the cell.

    Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];
    UILabel *myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 300, 22)];
    UILabel *myLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 40, 300, 22)];
    UILabel *myLabel3 = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 300, 22)];
    myLabel1.text=aBook.title;
    myLabel2.text=aBook.descripti开发者_StackOverflow中文版on;
    myLabel3.text=aBook.pubDate;

    [cell addSubview:myLabel1];
    [cell addSubview:myLabel2];
    [cell addSubview:myLabel3];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // Set up the cell

    return cell;
}

I am having this code. It displays from XML file. When I scroll, the text gets overlapped. Please help me out.


You add labels to your cell each time cell is reused so you end with multiple labels stacked on each other in one cell. What you need to change is to create labels only when cell itself is being created:

- (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];

        UILabel *myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 300, 22)];
        UILabel *myLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 40, 300, 22)];
        UILabel *myLabel3 = [[UILabel alloc] initWithFrame:CGRectMake(0, 100, 300, 22)];
        myLabel1.tag = 101;
        myLabel2.tag = 102;
        myLabel3.tag = 103;

        [cell.contentView addSubview:myLabel1];
        [cell.contentView addSubview:myLabel2];
        [cell.contentView addSubview:myLabel3];
        [myLabel1 release];
        [myLabel2 release];
        [myLabel3 release];
    }

    // Configure the cell.

    Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];
    UILabel *myLabel1 = (UILabel*)[cell.contentView viewWithTag:101];
    UILabel *myLabel2 = (UILabel*)[cell.contentView viewWithTag:101];
    UILabel *myLabel3 = (UILabel*)[cell.contentView viewWithTag:101];
    myLabel1.text=aBook.title;
    myLabel2.text=aBook.description;
    myLabel3.text=aBook.pubDate;

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // Set up the cell

    return cell;
}

Two more things to fix:

  • Do not forget to release labels you create after adding them to the cell, otherwise you get memory leak and may eventually run into low memory problems (especially with tableview)
  • add subviews to cell's contentView, not to the cell directly
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜