2013-12-23 52 views
0

在以下代碼中,其他行將重複使用UILabel文本。我知道它是一個表可重用性的問題,但不知道如何解決它。一切看起來都很好,即使是正在返回的計數。重複使用多個部分中的UITableViewCell

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

//Doc Name 
if(indexPath.section == 0) 
{ 
    cell=[tableView dequeueReusableCellWithIdentifier:@"cell"]; 

    if(cell==nil) 
    { 
     cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease]; 

    } 

    cell.textLabel.text= docName; 
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f]; 

    UILabel *name = [[UILabel alloc]init]; 
    name.backgroundColor = [UIColor clearColor]; 
    name.textAlignment = NSTextAlignmentCenter; 
    name.frame = CGRectMake(600,2.0f,250,50); 
    name.text = @"11:12:01"; 
    [cell addSubview:name]; 

} 

//Joint Work 
if(indexPath.section == 1) 
{ 
    cell=[tableView dequeueReusableCellWithIdentifier:@"cell"]; 

    if(cell==nil) 
    { 
     cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease]; 

    } 

    cell.textLabel.text= [jointWrkNames objectAtIndex:indexPath.row]; 
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f]; 
} 

//Detailing 
if(indexPath.section == 2) 
{ 
    cell=[tableView dequeueReusableCellWithIdentifier:@"cell"]; 

    if(cell==nil) 
    { 
     cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease]; 

    } 

    cell.textLabel.text= @"Detailing"; 
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f]; 
} 
} 
+0

使用不同的小區標識符的不同。這很基本。 – n00bProgrammer

+0

我沒有看到你返回細胞的地方。如果這一切都有效,我會感到驚訝。 – Jeremy

+0

我正在返回細胞。它沒有來,當我複製它。 – LeXeR

回答

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

//Doc Name 
if(indexPath.section == 0) 
{ 
    cell=[tableView dequeueReusableCellWithIdentifier:@"section_0_cell"]; 

    if(cell==nil) 
    { 
     cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"section_0_cell"]autorelease]; 

    } 

    cell.textLabel.text= docName; 
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f]; 

    UILabel *name = [[UILabel alloc]init]; 
    name.backgroundColor = [UIColor clearColor]; 
    name.textAlignment = NSTextAlignmentCenter; 
    name.frame = CGRectMake(600,2.0f,250,50); 
    name.text = @"11:12:01"; 
    [cell addSubview:name]; 

} 

//Joint Work 
if(indexPath.section == 1) 
{ 
    cell=[tableView dequeueReusableCellWithIdentifier:@"section_1_cell"]; 

    if(cell==nil) 
    { 
     cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"section_1_cell"]autorelease]; 

    } 

    cell.textLabel.text= [jointWrkNames objectAtIndex:indexPath.row]; 
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f]; 
} 

//Detailing 
if(indexPath.section == 2) 
{ 
    cell=[tableView dequeueReusableCellWithIdentifier:@"section_2_cell"]; 

    if(cell==nil) 
    { 
     cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"section_2_cell"]autorelease]; 

    } 

    cell.textLabel.text= @"Detailing"; 
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f]; 
} 
return cell; 
} 

對於成功的重用,如果正確的單元格,則cellIdentifier必須針對不同類型的細胞的獨特。因此每個部分的標識符不同。

+0

thanx好友,你的方法工作像魅力。只要改變'CellIdentifier'就行了。再次感謝。 – LeXeR

+0

很高興我能幫到你。 – n00bProgrammer

+0

在表格視圖中重用單元格的位置? – NANNAV

0

那麼你只需要刪除實例UILabel'sUITableView的每個單元的UITableView的每個重裝前。這將幫助你

你創建了

你的後
static NSString *cellIdentifier = @"Identifier";   
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];   
    if(cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil]; 
    } 

添加此

for(id obj in cell.contentView.subviews) 
    { 
     if([obj isKindOfClass:[UILabel class]]) 
     { 
      [obj removeFromSuperview]; 
     } 
    } 

希望你的問題現在已經得到清除!

+0

刪除和添加UIlabel似乎很複雜。我認爲改變標識符看起來簡單。 – LeXeR

+0

那麼你現在會認爲它很簡單,但是你已經開始面對這些問題了......:D ......而且它更冗長......說你有10個以上的部分,你認爲你會再添加10個每段的代碼行想想看... – IronManGill

0

製作標籤的分配,如果細胞產生,即在小區零

if(cell==nil) 
    { 
      cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease]; 
      UILabel *name = [[UILabel alloc]init]; 
    } 
+0

不足以解決這個問題。 –

0

簡單的方式,如果語句,否則同一小區出列,再利用再利用細胞表視圖

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell; 
    cell=[tableView dequeueReusableCellWithIdentifier:@"section_0_cell"]; 

    if(cell==nil) 
    { 
     cell= [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"section_0_cell"]; 
     cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f]; 
     UILabel *name = [[UILabel alloc]init]; 
     name.backgroundColor = [UIColor clearColor]; 
     name.textAlignment = NSTextAlignmentCenter; 
     name.frame = CGRectMake(600,2.0f,250,50); 

     [cell addSubview:name]; 
     name.tag=100; 
    } 

    UILabel *name = (UILabel*)[cell viewWithTag:100]; 
    name.hidden=YES; 
    //Doc Name 
    if(indexPath.section == 0) 
    { 
     name.hidden=NO; 
     cell.textLabel.text= docName; 
     name.text = @"11:12:01"; 
    } 

    //Joint Work 
    if(indexPath.section == 1) 
    { 
     cell.textLabel.text= [jointWrkNames objectAtIndex:indexPath.row]; 
    } 

    //Detailing 
    if(indexPath.section == 2) 
    { 
     cell.textLabel.text= @"Detailing"; 
    } 
    return cell; 
}