iphone:重装表数据的问题

时间:2011-07-19 07:30:45

标签: iphone objective-c cocoa-touch ios4

我在表格中使用自定义标签。每次我再次访问此页面时,标签文字会变得更暗,就像覆盖行为一样。 我该如何解决这个问题?

  - (void)viewWillAppear:(BOOL)animated {

    NSFetchRequest *request = [[NSFetchRequest alloc] init];

        NSEntityDescription *entity = [NSEntityDescription entityForName:@"Note" inManagedObjectContext:context];
        [request setEntity:entity]; 
        [request release];    
        [self.tableView reloadData];
    }

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

        // Set up the cell...
        Note *noteItem = [resultController objectAtIndexPath:indexPath];

        //[cell.textLabel setText:[noteItem noteTitle]];    
        //[cell.detailTextLabel setText:[dateFormatter stringFromDate:[noteItem creationDate]]];
        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        cell.accessoryView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"]];

        UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 200, 19)];
        newLabel.text = [noteItem noteTitle];
        [newLabel setBackgroundColor:[UIColor clearColor]];
        [cell addSubview:newLabel];
        [newLabel release];

        UILabel *detailLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 20, 200, 26)];
        detailLabel.text = [dateFormatter stringFromDate:[noteItem creationDate]];
        [detailLabel setFont:[UIFont fontWithName:@"Helvetica" size:12.0]];
        [detailLabel setBackgroundColor:[UIColor clearColor]];
        [cell addSubview:detailLabel];
        [detailLabel release];

        [cell setBackgroundColor:[UIColor clearColor]];
         [cell setAlpha:0.6];
        return cell;
    }

3 个答案:

答案 0 :(得分:2)

中创建UILabel
if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
        }

并在此条件之外指定其值

答案 1 :(得分:0)

你应该检查单元格== nil。如果是,则再次添加所有标签,否则,它们已被添加。

答案 2 :(得分:0)

你的cellForRowAtIndexPath方法应该看起来像 -

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

           nameLabelFrame = CGRectMake(5, 5, 200, 19);
        countLabelFrame = CGRectMake(5, 20, 200, 26);
          UILabel *lblTemp;
            lblTemp = [[UILabel alloc] initWithFrame:nameLabelFrame];
        lblTemp.tag = 1;
        [cell.contentView addSubview:lblTemp];
        [lblTemp release];


        lblTemp = [[UILabel alloc] initWithFrame:countLabelFrame];
        lblTemp.tag = 2;
        [cell.contentView addSubview:lblTemp];
        [lblTemp release];

        }

        // Set up the cell...
        Note *noteItem = [resultController objectAtIndexPath:indexPath];

UILabel *newLabel = (UILabel *)[cell viewWithTag:1];
        newLabel.text = [noteItem noteTitle];
        [newLabel setBackgroundColor:[UIColor clearColor]];



        UILabel *detailLabel = (UILabel *)[cell viewWithTag:2];
        detailLabel.text = [dateFormatter stringFromDate:[noteItem creationDate]];
        [detailLabel setFont:[UIFont fontWithName:@"Helvetica" size:12.0]];
        [detailLabel setBackgroundColor:[UIColor clearColor]];



        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        cell.accessoryView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"]];



        [cell setBackgroundColor:[UIColor clearColor]];
         [cell setAlpha:0.6];
        return cell;
    }