2011-10-30 3 views
0

테이블 뷰 셀에는 UISlider가 있습니다. 슬라이더 노브를 움직여 이전 뷰로 돌아가서 다시 테이블 뷰로 돌아 오면 슬라이더의 노브가 0으로 되돌아 왔지만 이전에 슬라이더를 움직였던 노브의 "고스트 (ghosting)"현상이 나타납니다 .iOS UISlider 노브는보기로 돌아갈 때 고스트가 발생합니다.

cellForRowAtIndexPath : 슬라이더 개체의 컨텍스트보기를 지우고 viewDidAppear에서 테이블을 다시로드하십시오.

누구든지 문제를 해결하는 방법을 알고 계십니까? 그것은 꽤 성가신 일입니다. 내가 도움이된다면 슬라이더 코드를 아래로 내려 놓습니다.

 // Setup slider 
     CGRect sliderFrame = CGRectMake(15, 56, 230, 0); 
     UISlider *slider = [[UISlider alloc] initWithFrame:sliderFrame]; 
     slider.clearsContextBeforeDrawing = YES; 
     [slider addTarget:self action:@selector(sliderUpdated:) forControlEvents:UIControlEventValueChanged]; 
     [slider addTarget:self action:@selector(sliderStopped:) forControlEvents:UIControlEventTouchUpInside]; 
     [cell.contentView addSubview:slider]; 
     [slider release]; 

감사합니다. 감사!

+1

이미 슬라이더를 그렸는지/이전에 그려진 슬라이더를 잡지 않으려 고하는 체크가 없습니다. 제 추측으로는 단순히 이전 슬라이더 위에 새로운 슬라이더를 그리는 것입니다. 따라서 백그라운드에서 다른 위치에있는 이전 슬라이더를 볼 수 있습니다. –

+0

빠른 응답을 보내 주셔서 감사합니다. 그건 의미가 있지만 어떻게 확인합니까? 셀의 모든 하위 뷰를 실제로 루프하여 이들이 존재하는지 확인하는 가장 좋은 방법입니까? 아니면 셀을 생성하지 않으면 그렇지 않습니다. –

답변

1

고스트 효과를주는 이전 UISlider에 새 UISlider을 새로 작성하는 경우가 대부분입니다. 당신이 셀에 추가

  1. 에 태그 UISlider

    두 가지 가능한 솔루션을 제공합니다.

  2. 하위 클래스 UITableViewCell 그리고 내용보기에 UISlider을 추가하고 ivar로 그 참조를 유지하십시오. 당신이있는 contentView에 추가 할 때

단순히 UISlider에 태그를 하나를 수행합니다. 그런 다음 셀을 다시 가져 오면 뷰를 먼저 가져 오거나 신선한 뷰를 만듭니다.

const int sliderViewTag = 99; 

UISlider *slider = [cell.contentView viewWithTag:sliderViewTag]; 

if (!slider) { 
    CGRect sliderFrame = CGRectMake(15, 56, 230, 0); 
    slider = [[UISlider alloc] initWithFrame:sliderFrame]; 
    slider.clearsContextBeforeDrawing = YES; 
    [slider addTarget:self action:@selector(sliderUpdated:) forControlEvents:UIControlEventValueChanged]; 
    [slider addTarget:self action:@selector(sliderStopped:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:slider]; 
    [slider release]; slider = nil; 
} 

2가 조금 더 복잡하지만 선호하는 방법이지만 2 가지 방법이 있습니다. Apple에서 위대한 문서를 찾을 수 있습니다. Table View Programming Guide 특히 섹션을 참조하십시오. A Closer Look at Table-View Cells

+0

폴 감사합니다. 이것은 서브 프로그램에서 프로그래밍 방식으로 추가하는 첫 번째 시도 였으므로 OS가 새로운 서브 뷰를 사용하여 서브 뷰를 재사용하는 대신 반대로 재사용 할 것이라고 가정했습니다. –

관련 문제