2013-08-05 108 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作爲私有變量並實現以下滾動視圖委託。我希望這是你想要的。

-(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:@"ShowLabelsInCells" object:nil]; 

和...

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

當你需要他們。

通過所需的細胞沒有迭代。

+0

當你需要在已經滾動的情況下創建一個新的單元格時,該怎麼辦? (我喜歡這個想法,但是修改現有的單元) – Wain

+1

另外,在Cell被釋放之前,你必須調用'removeObserver:'。沒有它的應用程序可能會崩潰。 – allprog

+0

好吧,出列的ay單元格將會隱藏/取消隱藏標籤。當單元格出隊時變量保持不變。也許你可以在控制器中使用一個屬性,以便在'cellForRowAtIndexPath'中你可以設置它。 – Fogmeister