0

UILabel每次加载时,内部的文本值UITableViewCell都会被交换。因为我cell height的 140cell.TextLabel.text无法设置frame并使其显示在中心。但我需要将 TitleText 显示在单元格的开头。所以,我曾经UILabel根据需要显示.但是每次我加载单元格时,它会为这些单元格显示错误的标题。但是当我记录该数组时,它会正确记录,如果我检查cell.TextLabel.text它是否正确显示。但不是在UILabel.Confused 很多。无法追踪我出错的地方。提前致谢。以下是我的代码。

`

 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 140;
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UILabel *Title;
    if (cell == nil) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        Title = [[UILabel alloc]init ];
        Title.frame =CGRectMake(20, 18, 152, 23);
        [Title sizeToFit];
    }
    NSMutableArray *contentArray = [sectionDict valueForKey:[array objectAtIndex:indexPath.section]];
    NSLog(@"content %@",contentArray);
    Title.text = [contentArray objectAtIndex:indexPath.row];
    [cell addSubview:Title];
    UIImageView *seaImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"PacificOcean.png" ]];
    seaImage.frame = CGRectMake(20, 60, 280, 80);
    [cell addSubview:seaImage];
    return cell;
}

`

4

3 回答 3

2

将您的子视图标签图像cell == nil添加到每个子视图的块集标签中的单元格。按标签访问您在块外的子视图。我希望它对你有帮助。

if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
  UILabel *Title = [[UILabel alloc]init ];
           Title.tag = 1000;
           Title.frame =CGRectMake(20, 18, 152, 23);
          [Title sizeToFit];
  [cell.contentView addSubview:Title];

 UIImageView *seaImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"PacificOcean.png" ]];
          seaImage.frame = CGRectMake(20, 60, 280, 80);
[cell.contentView addSubview:seaImage];
}
  NSMutableArray *contentArray = [sectionDict valueForKey:[array objectAtIndex:indexPath.section]];
  UILabel *Title = (UILabel *)[cell.contentView viewWithTag:1000];
  Title.text = [contentArray objectAtIndex:indexPath.row];
  return cell;

像这样更改您的代码..

于 2013-11-07T08:35:11.420 回答
2

像这样使用你的代码

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *Title;
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
Title = [[UILabel alloc]init ];
Title.frame =CGRectMake(20, 18, 152, 23);
[Title sizeToFit];
[cell.contentView addSubview: Title];

UIImageView *seaImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"PacificOcean.png" ]];
seaImage.frame = CGRectMake(20, 60, 280, 80);
[cell.contentView addSubview: seaImage];
}
NSMutableArray *contentArray = [sectionDict valueForKey:[array objectAtIndex:indexPath.section]];
NSLog(@"content %@",contentArray);
Title.text = [contentArray objectAtIndex:indexPath.row];

return cell;
}
于 2013-11-07T08:41:59.170 回答
1

我不知道这是否是您的错字,但cell.TextLabel.text它是一个 NSString,因此您不能将框架设置为该框架,但cell.TextLabel.frame应该可以。您在使用的方法中遇到的另一个问题是,UILabel *Title;在 if 语句之外声明,然后在 if 语句结束后操作,nil如果您成功地将单元格出队,它将在哪里。而且由于 Objective-C 对您非常好,因此当您将消息传递给nil. 如果您想使用此批准,您还需要在 if 语句中使用标签将标签添加到您的单元格,然后在您想要设置框架时获取相同的标签。这与您的情况相同,您seaImage不应在每次提供单元格时添加一个新单元格。

于 2013-11-07T08:16:29.260 回答