我正在使用UITableView来显示数据。我在每个细胞内放了1个UILabel。滚动时我想隐藏这些UILabel。我试过这个,但什么都没发生。
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
homeButton.userInteractionEnabled = NO;
HomeCell *cell = [[HomeCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
cell.timeLeft.hidden = YES;
}
感谢。
答案 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];
然后创建方法showLabel
和hideLabel
。
然后在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];