我正在加载带有图像的tableview。这些是异步加载的。 只有在滚动桌面视图时才会显示图像。
我知道这是因为tableview中可重用的单元格。我的代码如下。
我该如何防止这种情况发生。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MyCell *c = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (c == nil)
{
c = [[MyCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:@"cell"];
}
NSURL *url = [NSURL URLWithString:@"http://www.ss.com/my.png"];
NSURLRequest *r = [NSURLRequest requestWithURL:url];
[c.myImageView setImageWithURLRequest:r placeholderImage:[UIImage imageNamed:@"def.png"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
if (c)
{
c. myImageView.image = image;
[c setNeedsLayout];
}
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
}];
答案 0 :(得分:1)
在这种情况下使用延迟加载技术。好像我们必须在表格视图中显示图像,延迟加载是最好的技巧。这是图书馆 https://github.com/rs/SDWebImage 只需在项目中添加SDWebImage文件夹即可。 然后在您的课程中导入以下内容
#import "UIImageView+WebCache.h"
并在cellforRowIndex方法中编写以下代码
NSURL *url = [NSURL URLWithString:@"http://www.ss.com/my.png"];
[c.myImageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"def.png"]];
不需要成功失败块,因为它会延迟加载图像,并通过将其作为密钥本身将它们保存在缓存中。因此,如果图像已经加载一次,那么下次当您打开此控制器时,它将显示为好像在您的本地存储中。多数民众赞成这个图书馆的好处