【问题标题】:How to hide the textLabel property of the default UITableViewCell from all UITableView rows?如何从所有 UITableView 行中隐藏默认 UITableViewCell 的 textLabel 属性?
【发布时间】:2014-10-04 04:47:19
【问题描述】:

我正在玩一些 UITableView 编码并试图隐藏默认的 textLabel 属性。我使用了 UIScrollViewDelegate 协议,同时使用了 -scrollViewDidScroll 和 scrollViewDidEndDecelerating 方法来隐藏和显示标签。

代码仅适用于表格的第一行,而不是我想要的所有代码。这是我的代码:

*已编辑以显示解决方案代码。

- (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;
  }
}

那么任何人都可以帮助我隐藏和显示所有行吗?

【问题讨论】:

    标签: objective-c uitableview ios7 uiscrollviewdelegate


    【解决方案1】:

    您似乎已尝试将您的 cell 声明为表视图控制器中的变量或某处的全局变量。这是行不通的,因为它将始终设置为最后一个出队的单元格。您绝对应该在tableView:cellForRowAtIndexPath: 中将其声明为本地。

    scollViewDidScroll 中隐藏textLabel 并在scrollViewDidEndDecelerating 中再次显示它应该可以正常工作,您只需确保隐藏/显示表中所有当前可见的单元格。幸运的是,有一个 tableView 的方法可以解决这个问题:visibleCells。这将返回 NSArrayUITableViewCells ,您可以循环并隐藏 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;
        }
    }
    

    【讨论】:

    • 是的,我确实在全球范围内声明了单元格。我修复了这个并在本地声明并修改了 scrollView 方法,但仍然没有工作。所有 textLabel 仍然始终可见。
    • 嘿,我设法让它工作,只需将两种滚动视图方法 [tableView visibleCells] 修改为 [self.tableView visibleCells] 并添加 cell.textLabel.hidden = NO;到 cellForRowAtIndexPath 并且一切正常!!!!谢谢!!!
    • 哎呀,我没有把self.放在那里是个错误;我修复了答案中的代码。很高兴你找到并修复了它:)
    【解决方案2】:

    尝试将此cell.textLabel.hidden = YES; 放入您的cellForRowAtIndexPath 方法中。这是创建每个单元格的地方。

    【讨论】:

    • 如果我这样做,所有 textLabels 将被隐藏而不滚动。我需要它们在静态时显示,但是当用户滚动表格时,标签才会隐藏,当滚动完成时,标签将再次返回。
    【解决方案3】:

    注意:这只是一种可能的解决方案,可能还有其他更优化的解决方案。

    • 每次表格以scrollViewDidScroll: 开始滚动时,从表格中获取可见单元格。然后遍历每个单元格并将其设置为 textLabel hidden。

    • 获取scrollViewDidEndDecelerating:中的可见单元格并设置textLabel可见。

    使用yourTableView.visibleCells获取可见单元格。

    【讨论】:

    • 我在发布我的帖子后看到了迈克的回答。相同的解决方案。你应该试试看。
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多