表格视图单元格未正确更新
Posted
技术标签:
【中文标题】表格视图单元格未正确更新【英文标题】:tableview cells not updating properly 【发布时间】:2017-08-09 15:32:22 【问题描述】:我正在使用表格视图来显示下载的歌曲。我在下载歌曲之前创建空文件夹,下载歌曲后没有灭绝“.mp3”我正在用已灭绝的原始文件替换该文件。mp3 现在旨在获取文件音乐文件夹并在表格视图中对其进行拍摄。表格视图在下载歌曲之前在单元格中显示活动指示器。下载歌曲后,我通过隐藏按钮来替换活动指示器。我的问题是下载文件后它无法替换按钮但它隐藏了指示器。即使我滚动了按钮也没有出现。每当我关闭该视图控制器并返回下载列表时,它都会正确显示。下载文件后,我尝试了[tableview reload data];
,但没有任何变化。
任何帮助将不胜感激
我正在使用我正在使用表格视图来显示下载的歌曲。表格视图在下载歌曲之前在单元格中显示活动指示器。下载歌曲后,我通过隐藏按钮来替换活动指示器。我的问题是下载文件后它无法替换按钮但它隐藏了指示器。即使我滚动了按钮也没有出现。每当我关闭该视图控制器并返回下载列表时,它都会正确显示。下载文件后,我尝试了[tableview reload data];
,但没有任何变化。
任何帮助将不胜感激
if((![[songName substringFromIndex:MAX((int) [songName length]-4, 0)] isEqualToString:@".mp3"])
CoustoumCell *cellMain = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cellMain.backgroundView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Table-view-background.png"]];
cellMain.AlbumLable.textColor = [UIColor colorWithRed:0.278 green:0.278 blue:0.278 alpha:1.0];
cellMain.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Table-view-selected-background.png"]];
cellMain.indiCatorForDon.tag=indexPath.row;
[cellMain.indiCatorForDon startAnimating];
[cellMain.playButton removeFromSuperview];
cellMain.imageView.image=Nil;
cellMain.downloadStatusLable.text=@"Downloading....";
cellMain.AlbumLable.text=[_songsList objectAtIndex:indexPath.row];
cellMain.numberLable.text=[NSString stringWithFormat:@"%d",indexPath.row+1];
else
CoustoumCell *cellMain = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cellMain.backgroundView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Table-view-background.png"]];
cellMain.AlbumLable.textColor = [UIColor colorWithRed:0.278 green:0.278 blue:0.278 alpha:1.0];
cellMain.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Table-view-selected-background.png"]];
cellMain.AlbumLable.text=[_songsList objectAtIndex:indexPath.row];
[cellMain.indiCatorForDon stopAnimating];
cellMain.downloadStatusLable.textColor = [UIColor colorWithRed:0.278 green:0.278 blue:0.278 alpha:1.0];
cellMain.sizeLable.textColor = [UIColor colorWithRed:0.278 green:0.278 blue:0.278 alpha:1.0];
cellMain.sizeLable.text=[[self getSize] objectAtIndex:indexPath.row];
cellMain.downloadStatusLable.text=@"Downloaded";
cellMain.completedImage.image=[UIImage imageNamed:@"checked.png"];
cellMain.numberLable.text=[NSString stringWithFormat:@"%d",indexPath.row+1];
cellMain.playButton.tag=indexPath.row;
return cellMain;
从另一个视图下载歌曲发送通知到表格视图后
- (void) receiveTestNotification:(NSNotification *) notification
if ([[notification name] isEqualToString:@"TestNotification"])
NSLog (@"Successfully received the test notification!");
// Perform long running process
[self updateDownloadList];
[[AlbumsAnsSongs sharedManager] getallFiles];
[_tableView reloadData];
【问题讨论】:
请出示一些代码 你在使用可重复使用的细胞吗? 是的,我正在使用 @user1000 现在我用代码更新它。 @VenkateshSRoyal 请显示您调用的代码 [tableView reloadData];请检查答案 【参考方案1】:由于问题在于 UI 更新,所以我猜当您的数据完成下载时,您应该像这样调用 reloadData 方法:
- (void) receiveTestNotification:(NSNotification *) notification
if ([[notification name] isEqualToString:@"TestNotification"])
NSLog (@"Successfully received the test notification!");
// Perform long running process
[self updateDownloadList];
[[AlbumsAnsSongs sharedManager] getallFiles];
dispatch_async(dispatch_get_main_queue(), ^(void)
[_tableView reloadData];
);
似乎存在的另一个问题是您正在使用此语句删除按钮
[cellMain.playButton removeFromSuperview];
但在其他部分,您没有添加按钮,
我认为你应该隐藏按钮而不是删除 playButton
cellMain.playButton.hidden = YES
然后在其他部分
cellMain.playButton.hidden = NO
说明:
您正在从单元格中删除按钮,因为单元格已出队或者您可以说已重用,所以没有按钮的单元格正在屏幕上显示
【讨论】:
我正在 Web 视图中下载文件收到响应后,我正在下载文件后转到下载列表,我正在发送通知以下载列表视图并获取整个歌曲列表并完成重新加载数据。 @VenkateshSRoyal 我更新了答案,请用这个替换你的函数并告诉我输出是什么? 超级兄弟,它的工作谢谢你,但我应该知道原因 干得好,我在答案中添加了一点解释,如果您不明白请检查并告诉我以上是关于表格视图单元格未正确更新的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 带有 UITextView 的表格视图单元格未正确调整大小