2013-10-25 7 views
0

사용자 지정 UIButton을 추가하려고하는 uitableview를 추가했습니다. 다음 코드로 성공적으로 추가됩니다.uitableview 내용 새로 고침

image=[UIButton buttonWithType:UIButtonTypeCustom]; 
    image.frame=CGRectMake(240, 7, 25, 25); 
    image.tag=101; 


    image2=[UIButton buttonWithType:UIButtonTypeCustom]; 
    image2.frame=CGRectMake(240, 7, 25, 25); 
    image2.tag=102; 

    if ([outputlabel.text isEqualToString:@"Yes"]||[outputlabel.text isEqualToString:@"Yes"]) { 
     [image setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal]; 
     [cell1.contentView addSubview:image]; 
     [cell1.contentView bringSubviewToFront:image]; 
    } 
    else 
    { 
     [image2 setImage:[UIImage imageNamed:@"cross.png"] forState:UIControlStateNormal]; 
     [cell1.contentView addSubview:image2]; 
     [cell1.contentView bringSubviewToFront:image2]; 
    } 

처음에는 제대로 작동합니다. 테이블 뷰를 다시로드하면 uibutton 이전 이미지와 겹칩니다. 전체 값을 새 테이블로 새로 고칠 수 없습니다. 누군가는 내가 코드에서 잘못하고있는 것을 생각하고있다.

enter image description here

+0

세포를 새로 고치기 위해 이미지를 설정할 때마다 [cell1.contentView setNeedsDisplay : True]를 사용해보십시오. – Neha

답변

2

업데이트 됨. 항상 셀의 내용보기를 셀 == nill 블록에 만듭니다. 그냥 cellForRowAtIndexPath에서이 좋아해요 .. 그리고 단지 그것을 겹쳐 실 거예요 완벽 UR 셀을 다시 .. 태그에 의해 외부

if (cell == nil) 
{ 

cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIndentifier]; 

//Add your button here.. set the tag. 
    UIButton image=[UIButton buttonWithType:UIButtonTypeCustom]; 
    image.frame=CGRectMake(240, 7, 25, 25); 
    image.tag=101; 
} 


    UIButton *btn = (UIButton *)[cell.contentView viewWithTag:101]; 

    if ([outputlabel.text isEqualToString:@"Yes"]||[outputlabel.text isEqualToString:@"Yes"]) 
     { 
       [btn setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal]; 
      } 
      else 
      { 
       [btn setImage:[UIImage imageNamed:@"cross.png"] forState:UIControlStateNormal]; 
      } 

을 그 내용 없음을 사용합니다 .. 그것은 경우

+0

이 작동하지 않습니다 @ TamilKing –

+0

@MinkleGarg : 지금 당신이 얻은 무게 오류를 알려주십시오. 그런 다음 cellForRowAtIndexPath의 전체 코딩을 넣고 그 위치를 [yourTableView reload]로 저장하십시오. 그런 다음 두 버튼을 사용하는 이유를 말해주십시오. 하나의 버튼을 사용하십시오. 그 버튼의 이미지를 기다리십시오. 내 코드를 업데이트하십시오. – TamilKing

+0

@MinkleGarg : 시도해보십시오. 이것은 분명히 그것은 당신을 위해 작동합니다 .. – TamilKing

0

당신이 -cellForRowAtIndexPath를 구현해야합니다 :. 그런 다음 해당 tableView에 reloadRowsAtIndexPaths : withRowAnimation :을 호출하여 tableViewCell을 새로 고칩니다. tableView는 차례대로 cellForRowAtIndexPath를 호출하고, 구성된 셀을 반환합니다.

정적 셀이있는 경우 컨트롤을 IBOutlet에 연결하여 변경해야하는 항목에 액세스 할 수 있습니다.

2

기본적으로 .. 당신을 위해 도움이되는 것 우리는 tableview의 내용을 참조하고 싶다면이 reloadData를 사용할 필요가 있습니다. 당신은 시도해 봤어 : -

[yourTableView reloadData]; 
+0

그래, 내가 이랬다 .. 텍스트가 완벽하게 업데이트되었지만 이미지에 문제가 발생했습니다. –

+0

이미지의 문제점은 무엇입니까 ?? –

+0

중복됩니다. 인덱스 0에서 첫 번째 틱을 가정하면, 배열에 따라 tick.png 이미지가 있습니다. 그리고 완벽하게 보여주는 테이블보기. 그러나 인덱스 0에 cross.png 이미지가 포함 된 경우 두 번째로 오래된 이미지는 그대로 유지되고 두 번째 이미지는 거기에 추가됩니다. –

0

[cell1.contentView setNeedsDisplay:TRUE]; 

이미지를 설정할 때마다 사용 셀의보기를 새로 고침 해보세요.

0

나는이 이미지를 -tableView:cellForRawAtIndexPath: 방법으로 추가하고있는 것으로 의심됩니다.

우선 - 일부 재사용 식별자로 셀을 재사용하면 셀이 메모리에 남아있어 필요할 때 재사용됩니다. 즉, 셀의 모든 하위 뷰가 유지된다는 의미입니다. 이 경우 매번 재사용하기 위해 셀을 준비해야합니다. 예 : - 셀의 모든 하위 뷰를 제거합니다.

그러나 더 나은 방법으로, 적은 수의 작업 - UITableViewCell의 하위 클래스를 만들고 해당 셀의 속성으로 UIButton을 추가하는 것이 좋습니다.

그런 다음 조건에 따라이 속성을 변경하면됩니다.

if ([outputlabel.text isEqualToString:@"Yes"]) { 
    [cell1.button setImage:[UIImage imageNamed:@"tick.png"] forState:UIControlStateNormal]; 
} 
else 
{ 
    [cell1.image setImage:[UIImage imageNamed:@"cross.png"] forState:UIControlStateNormal]; 
} 

물론 이니셜 라이저의 cell.contentView에 버튼을 추가해야합니다. 일반적으로 사용자 정의 셀 .m 파일의 -initWithStyle:reuseIdentifier: 메소드입니다.