2014-10-04 25 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

相关问题