滚动时在UITableViewCell中隐藏UILabel

时间:2013-08-05 06:38:18

标签: ios objective-c uitableview

我正在使用UITableView来显示数据。我在每个细胞内放了1个UILabel。滚动时我想隐藏这些UILabel。我试过这个,但什么都没发生。

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

感谢。

3 个答案:

答案 0 :(得分:3)

我会使用NSNotification

HomeCell方法的awakeFromNib课程中执行...

[[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];

当你需要它们时。

不需要迭代所需的单元格。

答案 1 :(得分:1)

你正在做的是创建一个全新的单元格,它永远不会在屏幕上显示,并将其标签设置为隐藏。

相反,您应该在控制器上设置属性以指示滚动正在进行中。然后,您应该迭代表视图上的可见单元格并进行修改。返回新单元格时,应检查标记以确定要执行的操作。

当你获得委托回调告诉你滚动动画已经完成时,你应该重置标志。

答案 2 :(得分: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];