0

UILabel内部のテキスト値UITableViewCellは、ロードするたびにスワップされますcell height。140cell.TextLabel.textを設定して中央に表示することはできませんframe。しかし、セルの先頭に TitleTextUILabelを表示する必要があります。 .しかし、セルをロードするたびに、それらのセルの間違ったタイトルが表示されます.しかし、その配列をログに記録すると、正しくログに記録され、チェックすると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;
}

`

4

3 に答える 3

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 に答える
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 に答える
1

これがあなたのタイプミスかどうかはわかりませんcell.TextLabel.textが、NSStringであるため、フレームをそれに設定することはできませんが、cell.TextLabel.frame機能するはずです。使用しているアプローチのもう 1 つの問題は、UILabel *Title;if ステートメントの外側で宣言され、if ステートメントがnilセルを正常にデキューした場合に終了した後に操作されることです。また、objective-C はあなたにとても親切なので、メッセージを に渡すときに文句を言うことはありませんnil。この承認を使用する場合は、おそらくタグを使用して if ステートメントのセルにラベルを追加し、フレームを設定するときに同じラベルを取得する必要があります。これは、seaImageセルを提供するたびに新しいセルを追加するべきではないのと同じです。

于 2013-11-07T08:16:29.260 に答える