UITabel文本值在UITableViewCell Swaps中

时间:2013-11-07 07:47:37

标签: ios objective-c uitableview

UILabel每次加载时,UITableViewCell内的文字值都会被重叠。我的cell height为140 cell.TextLabel.text无法设置frame并且让它显示在centre.But我需要TitleText显示在cell的开头。所以,我使用UILabel显示我需要的。但每次加载单元格时它显示错误的标题为那些单元格。但是当我记录该数组时,它正确记录,如果我检查cell.TextLabel.text它正确显示。但不在UILabel。困惑很多。无法追踪我出错的地方。谢谢你提前。 以下是我的代码。

`

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

`

3 个答案:

答案 0 :(得分: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;

像这样更改您的代码..

答案 1 :(得分: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;
}

答案 2 :(得分:1)

我不知道这是否是您的错误,但cell.TextLabel.text是NSString,因此您无法将框架设置为该框架,但cell.TextLabel.frame应该有效。您在使用的方法中遇到的另一个问题是UILabel *Title;在if语句之外被声明,如果语句结束,如果您成功将单元格出列,那么它将在nil之后运行。而且,由于Objective-C对你很好,所以当你将消息传递给nil时,它不会抱怨。如果您想使用此批准,您还需要在if语句中将标签添加到您的单元格中,可能带有标签,然后在您想要设置框架时获得相同的标签。这与您的seaImage相同,每次提供单元格时都不应添加新的。{/ p>