2013-08-05 4 views
1

데이터를 표시하기 위해 UITableView를 사용하고 있습니다. 나는 각 세포 안에 1 개의 UILabel을 넣었다. 스크롤 할 때이 UILabel을 숨기고 싶습니다. 나는 이것을 시도했지만 아무 일도 일어나지 않았다.스크롤 할 때 UITableViewCell의 UILabel 숨기기

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    homeButton.userInteractionEnabled = NO; 
    HomeCell *cell = [[HomeCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:nil]; 
    cell.timeLeft.hidden = YES; 
} 

감사합니다.

+1

재미있는 방법 만 만드는 것이 : 나는이 일을하고있다 . 그것은 매우 짜증나게 할 수 있습니다. 이것이 실험이라면 괜찮습니다. 그러나 이것을 앱으로 만들려면 디자인 수정을 권합니다. – allprog

+0

@allprog 귀하의 조언에 감사드립니다. 나는 그것에 대해 생각할 것이다 :) – Jacki

답변

1

시도해보십시오. BOOL isScrolling을 개인 변수로 사용하고 다음 scrollview 대리자를 구현하십시오. 나는 이것이 당신이 원했던 것이기를 바랍니다.

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{   
    if(!decelerate) 
    { 
     isScrolling = NO; 

     NSArray *visibleRows = [self.aTableView indexPathsForVisibleRows]; 
     [self.aTableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone]; 
    } 
    else 
    { 
     isScrolling = YES;   
    } 
} 

-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
    isScrolling = NO; 
    NSArray *visibleRows = [self.aTableView indexPathsForVisibleRows]; 
    [self.aTableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone]; 
} 


-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    isScrolling = YES; 
    NSArray *visibleRows = [self.aTableView indexPathsForVisibleRows]; 
    [self.aTableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone]; 

} 

참고 : 나는 기본적으로있는 UITableViewCell와 함께 제공되는 textLabel라는를 사용했으며, cellForRowAtIndexPath에서 : 스크롤 나쁜 생각 것 같다 동안 사라

if(isScrolling) 
    [cell.textLabel setHidden:YES]; 
else 
    [cell.textLabel setHidden:NO]; 
+0

대단히 감사합니다. 매력처럼 작동 ^^ !. – Jacki

+0

당신은 대환영입니다! – nithinbhaktha

1

당신이하고있는 일은 완전히 새로운 셀을 만드는 것입니다.이 셀은 절대로 화면에 나타나지 않을 것이며 레이블을 숨김으로 설정합니다.

대신 컨트롤러에서 스크롤이 진행 중임을 나타내는 속성을 설정해야합니다. 그런 다음 테이블보기에서 보이는 셀을 반복하여 수정해야합니다. 그리고 새 세포를 반환 할 때 깃발을 점검하여 무엇을해야할지 결정해야합니다.

스크롤 애니메이션이 완료되었음을 알리는 델리게이트 콜백을 받으면 플래그를 재설정해야합니다.

+0

고마워. 문제를 해결했습니다. – Jacki

3

이 경우 NSNotification을 사용합니다. awakeFromNib 방법 할 수있는 HomeCell 클래스에서

...

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showLabel) name:@"ShowLabelsInCells" object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideLabel) name:@"HideLabelsInCells" object:nil]; 

는 그런 방법 showLabelhideLabel을 만들 수 있습니다.

다음의 UITableViewController 당신이 그들을 필요로 할 때 당신은 ...

[[NSNotificationCenter defaultCenter] postNotificationName:@"HideLabelsInCells" object:nil]; 

...있는 ScrollView 스크롤 (및 스크롤 정지) 및 통화에 대한

[[NSNotificationCenter defaultCenter] postNotificationName:@"ShowLabelsInCells" object:nil]; 

등을 볼 수 있습니다.

세포를 통한 반복이 필요하지 않습니다.

+0

이미 스크롤하는 동안 새 셀을 만들어야 할 때는 어떻게해야합니까? (나는 기존 셀을 수정하기위한 아이디어가 마음에 든다.) – Wain

+1

또한 셀이 할당 해제되기 전에'removeObserver :'를 호출해야한다. 앱이 없을 경우 충돌이 발생할 수 있습니다. – allprog

+0

대기열에서 제외 된 셀에는 레이블이 숨김/숨김 상태로 표시됩니다. 변수는 셀이 대기열에서 제거 될 때 지속됩니다. 아마도'cellForRowAtIndexPath'에서 확실하게 설정할 수 있도록 컨트롤러에서 속성을 사용할 수 있습니다. – Fogmeister

관련 문제