1

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

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

谢谢。

4

3 回答 3

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

当你需要它们时。

无需遍历单元格。

于 2013-08-05T06:48:07.993 回答
1

您在那里所做的是创建一个全新的单元格,它永远不会也永远不会出现在屏幕上,并将其标签设置为隐藏。

相反,您应该在控制器上设置一个属性以指示滚动正在进行中。然后你应该迭代表格视图上的可见单元格并修改它们。并且在返回新单元格时,您应该检查标志以决定要做什么。

当您收到委托回调告诉您滚动动画已完成时,您应该重置标志。

于 2013-08-05T06:43:51.897 回答
1

试试这个。将 aBOOL 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];
于 2013-08-05T07:32:21.620 回答