2013-08-05 75 views
1

我正在使用UITableView来显示数据。我在每个单元格内放置了1个UILabel。我想在滚动时隐藏这些UILabel。我已经尝试过,但没有发生任何事。当滚动时隐藏UITableViewCell中的UILabel

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

谢谢。

+1

有趣的方法,但做的东西消失,同时滚动似乎是一个坏主意。这可能很烦人。如果这是一个实验,那么没关系,但是如果你想将它构建到应用程序中,我会敦促你修改你的设计。 – allprog

+0

@allprog谢谢你的建议。我会考虑一下:) – Jacki

回答

1

试试这一个。将BOOL 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]; 
+0

非常感谢。像魅力一样工作^^ !. – Jacki

+0

非常欢迎您! – nithinbhaktha

1

你在做什么有创建一个全新的细胞,这是从来没有,将来也不会在屏幕上,它的标签设置为隐藏。

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

当你委托回调告诉你的是,滚动动画已完成,应重置该标志。

+0

谢谢。我已经解决了这个问题。 – Jacki

3

我会使用这个NSNotification

awakeFromNib方法做HomeCell类...

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

当你需要他们。

通过所需的细胞没有迭代。

+0

当你需要在已经滚动的情况下创建一个新的单元格时,该怎么办? (我喜欢这个想法,但是修改现有的单元) – Wain

+1

另外,在Cell被释放之前,你必须调用'removeObserver:'。没有它的应用程序可能会崩溃。 – allprog

+0

好吧,出列的ay单元格将会隐藏/取消隐藏标签。当单元格出队时变量保持不变。也许你可以在控制器中使用一个属性,以便在'cellForRowAtIndexPath'中你可以设置它。 – Fogmeister