2012-02-09 23 views
0

私はtableViewを持っていますが、テーブルビューのcell.the textlabelが重なって表示されています。スクリーンショットとコードです。テーブルビューのセルがクリックされたデータが重なって表示される

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

} 
NSDictionary *boy=[self.media1 objectAtIndex:indexPath.row]; 
NSString *str=[[NSString alloc]initWithFormat:@"%@",boy]; 
NSInteger n=[str intValue]; 
NSLog(@"the value:%@",str); 
if(n ==0) 
{ 
CGRect starFrame = CGRectMake(217,6, 85, 40); 

UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease]; 
starImage.image = [UIImage imageNamed:@"nostar.png"]; 
starImage.backgroundColor=[UIColor clearColor]; 
[cell.contentView addSubview:starImage]; 

NSString *boo=[[NSString alloc]initWithFormat:@"%d",n]; 
CGRect labelFrame = CGRectMake(203,18, 20, 20); 
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease]; 
Label.text=boo; 
[cell.contentView addSubview:Label]; 


    } 
if(n >=1) 
{ 
    CGRect starFrame = CGRectMake(217,6, 85, 40); 

    UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease]; 
    starImage.image = [UIImage imageNamed:@"1star.png"]; 
    [cell.contentView addSubview:starImage]; 

    NSString *boo=[[NSString alloc]initWithFormat:@"%d",n]; 
    CGRect labelFrame = CGRectMake(203,18, 20, 20); 
    UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease]; 
    Label.text=boo; 
    [cell.contentView addSubview:Label]; 

    } 

if(n >=2) 
{ 
CGRect starFrame = CGRectMake(217,6, 85, 40); 

UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease]; 
starImage.image = [UIImage imageNamed:@"twostar.png"]; 
[cell.contentView addSubview:starImage]; 

NSString *boo=[[NSString alloc]initWithFormat:@"%d",n]; 
CGRect labelFrame = CGRectMake(203,18, 20,20); 
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease]; 
Label.text=boo; 
[cell.contentView addSubview:Label]; 

} 
if(n >=3) 
{ 
CGRect starFrame = CGRectMake(217,6, 85, 40); 

UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease]; 
starImage.image = [UIImage imageNamed:@"threestar.png"]; 
[cell.contentView addSubview:starImage]; 

NSString *boo=[[NSString alloc]initWithFormat:@"%d",n]; 
CGRect labelFrame = CGRectMake(203,18, 20,20); 
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease]; 
Label.text=boo; 
[cell.contentView addSubview:Label]; 

} 

if(n >= 4) 
{ 
CGRect starFrame = CGRectMake(217,6, 85, 40); 

UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease]; 
starImage.image = [UIImage imageNamed:@"4star.png"]; 
[cell.contentView addSubview:starImage]; 

NSString *boo=[[NSString alloc]initWithFormat:@"%d",n]; 
CGRect labelFrame = CGRectMake(203,18,20,20); 
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease]; 
Label.text=boo; 
[cell.contentView addSubview:Label]; 
} 
    if(n >= 5) 
    { 
CGRect starFrame = CGRectMake(217,6, 85, 40); 

UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease]; 
starImage.image = [UIImage imageNamed:@"5star.png"]; 
[cell.contentView addSubview:starImage]; 

NSString *boo=[[NSString alloc]initWithFormat:@"%d",n]; 
CGRect labelFrame = CGRectMake(203,18, 20,20); 
UILabel *Label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease]; 
Label.text=boo; 

[cell.contentView addSubview:Label]; 
} 


    cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator; 
    cell.textLabel.text=[self.story objectAtIndex:indexPath.row]; 
    cell.textLabel.numberOfLines=2; 

    return cell; 
    } 

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

title=[self.story objectAtIndex:indexPath.row]; 
NSDictionary *detaildesc1=[self.descriptiondesc objectAtIndex:indexPath.row]; 
FirstViewDetailDetail *detailViewController1 = [[FirstViewDetailDetail alloc]  initWithItem:detaildesc1 Title:title];  
    [self.navigationController pushViewController:detailViewController1 animated:YES]; 
    [detailViewController1 release]; 

    } 

enter image description here

+0

ワンノートのほかに:あなたは 'N> = '1'、 'N> = 2'などをチェックしているので、あなたはまた、句場合は、他のすべてを実行している5つ星のためにこのよう

'switch'ステートメントを使用すると、これを高速化できます。私は重ね合わされた数を助けることができない。 –

答えて

1

あなたの問題は、あなたが新しいラベルとImageViewのにセルが表示されるたびに追加することです。
未使用のセルキューから1つを取得しなかったために、新しいセルを作成する必要がある場合は、これを1回だけ実行する必要があります。

"ダークスポット"は、お互いの上にある2つのUILabelsです。テーブルを上下にスクロールして同じように表示します。

UI *の割り当てをif (cell == nil)に移動し、そのif文の外に設定します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     // create a new cell 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
     // create views here and add them to the cell. 
     CGRect starFrame = CGRectMake(217,6, 85, 40); 
     UIImageView *starImage = [[[UIImageView alloc] initWithFrame:starFrame] autorelease]; 
     // use tags to get the views later. 
     starImage.tag = 1021; 
     starImage.image = [UIImage imageNamed:@"nostar.png"]; 
     starImage.backgroundColor=[UIColor clearColor]; 
     [cell.contentView addSubview:starImage]; 

     CGRect labelFrame = CGRectMake(203,18, 20, 20); 
     UILabel *label = [[[UILabel alloc] initWithFrame:labelFrame] autorelease]; 
     label.tag = 1022; 
     [cell.contentView addSubview:label]; 

     // do all cell configuration here that is the same for all cells in your table 
     cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator; 
     cell.textLabel.numberOfLines=2; 
    } 
    // whatever happened before you have a valid cell at this point 

    // get the imageView and label you added before 
    UIImageView *starImageView = [cell.contentView viewWithTag:1021]; 
    UILabel *label = [cell.contentView viewWithTag:1022]; 

    NSDictionary *boy=[self.media1 objectAtIndex:indexPath.row]; 
    NSString *str=[[NSString alloc]initWithFormat:@"%@",boy]; 
    NSInteger n=[str intValue]; 
    UIImage *image = nil; 
    switch (n) { 
     case 0: 
      image = [UIImage imageNamed:@"nostar.png"]; 
      break; 
     case 1: 
      image = [UIImage imageNamed:@"1star.png"]; 
      break; 
     case 2: 
      image = [UIImage imageNamed:@"twostar.png"]; 
      break; 
     case 3: /* more code here */ 
     case 4: /* here */ 
     case 5: /* and here */ 
    } 
    starImageView.image = image; 
    NSString *boo=[[NSString alloc]initWithFormat:@"%d",n]; 
    label.text = boo; 

    cell.textLabel.text=[self.story objectAtIndex:indexPath.row]; 
    return cell; 
} 
+0

"n"の値は正確に5または0であるか、または1.値が43または50である可能性があります。スイッチを使用すると、 – kingston

関連する問題