2014-10-04 67 views
0

我正在玩一些UITableView編碼,並試圖隱藏默認的textLabel屬性。我使用了UIScrollViewDelegate協議,並使用-scrollViewDidScroll和scrollViewDidEndDecelerating方法來隱藏和顯示標籤。如何從所有UITableView行中隱藏默認UITableViewCell的textLabel屬性?

該代碼工作正常與表的第一行,而不是所有這些都是我想要的。這裏是我的代碼:

*編輯顯示解決方案代碼。

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

    cell.textLabel.hidden = NO; 
    cell.textLabel.text = @"TEST"; 

    return cell; 
} 

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    for (cell in [self.tableView visibleCells]) { 
    cell.textLabel.hidden = YES; 
    } 
} 

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    for (cell in [self.tableView visibleCells]) { 
    cell.textLabel.hidden = NO; 
    } 
} 

所以任何人都可以幫我隱藏和顯示所有的行?

回答

2

它看起來像你試過聲明你的cell作爲你的表視圖控制器的變量或作爲一個全球性的地方。這不會起作用,因爲它將始終設置爲最後一個出現的單元格。你當然應該在tableView:cellForRowAtIndexPath:的本地申報。

隱藏textLabelscollViewDidScroll並再次顯示它在scrollViewDidEndDecelerating應該工作正常,你只需要確保你隱藏/顯示錶中所有當前可見的單元格。幸運的是,有一種tableView方法可以幫助您:visibleCells。返回NSArrayUITableViewCell,您可以循環並隱藏textLabel

所以,它應該是這個樣子:

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

    NSDate *object = self.objects[indexPath.row]; 
    cell.textLabel.text = [object description]; 

    cell.backgroundColor = [UIColor redColor]; 
    return cell; 
} 

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    for (UITableViewCell *cell in [self.tableView visibleCells]) { 
     cell.textLabel.hidden = YES; 
    } 
} 

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    for (UITableViewCell *cell in [self.tableView visibleCells]) { 
     cell.textLabel.hidden = NO; 
    } 
} 
+0

是的,我確實在全球範圍內聲明瞭小區。我解決了這個問題,並在本地聲明並修改了scrollView方法,但仍然無效。所有textLabel始終可見。 – 2014-10-04 06:33:47

+0

嘿,我設法讓它只是修改窗體兩個scrollView方法[tableView visibleCells]到[self.tableView visibleCells]並添加cell.textLabel.hidden = NO;到cellForRowAtIndexPath和所有工作正常!謝謝!!! – 2014-10-04 06:39:15

+0

Opps,這是我的錯誤,不把'self.'放在那裏;我在答案中修復了代碼。很高興你找到它並修復它:) – 2014-10-04 06:40:58

0

請嘗試將此cell.textLabel.hidden = YES;放入您的cellForRowAtIndexPath方法中。那是每個單元格創建的地方。

+0

如果我這樣做,所有的textLabels將被隱藏而不滾動。我需要它們在靜態時顯示,但是當用戶滾動表格時,只有標籤隱藏,滾動標籤時會再次返回。 – 2014-10-04 05:10:13

0

注:這只是一個可能的解決方案,可能有其他更優化的解決方案在那裏。

  • 每當表開始滾動時,從表中獲取可見單元格scrollViewDidScroll:。然後遍歷每個單元格,並將其設置爲隱藏的textLabel

  • 獲取scrollViewDidEndDecelerating:中的可見單元格並將textLabel設置爲可見。

使用yourTableView.visibleCells獲取可見單元格。

+0

我看到Mike發佈我的回答。同樣的解你應該嘗試一下。 – n00bProgrammer 2014-10-04 06:35:40