gpt4 book ai didi

iphone - Storyboard中自定义单元格中的 UIActivity 指示器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:23:24 27 4
gpt4 key购买 nike

我已将 UIActivityIndi​​cator 的 IBOutlet 添加到自定义单元格,但它并未显示在每个单元格上,仅在前 2-3 个单元格上显示,然后什么都没有。另一件事,当我滚动表格并返回前 3 个单元格时,UIActivityIndi​​cator 也会从这些单元格中消失......

代码:

单元格.h

@interface Cell : UITableViewCell

@property (strong, nonatomic) IBOutlet UIImageView *image;
@property (strong, nonatomic) IBOutlet UILabel *label;
@property (strong, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator;

@end

细胞.m

@implementation Cell

- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self)
{
// change to our custom selected background view
}
return self;
}

@end

在 Storyboard 中,UIactivityIndi​​cator 设置为:行为: - 动画

出于测试目的...

和:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CustomCell";
Cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// load the image for this cell
Wallpaper *wallpaper = [xmlParser.wallpapers objectAtIndex:indexPath.row];

cell.label.text = wallpaper.title;
NSString *imageToLoad = wallpaper.thumbnail;

[cell.image setImageWithURL:[NSURL URLWithString:imageToLoad] placeholderImage:nil options:SDWebImageProgressiveDownload progress:^(NSUInteger receivedSize, long long expectedSize)
{

}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)
{
//[cell.activityIndicator stopAnimating];
}];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(tapped:)];
[cell.image addGestureRecognizer:tap];
[cell.image setTag:indexPath.row];

CALayer * l = [cell.image layer];
[l setMasksToBounds:YES];
[l setCornerRadius:5.0];
cell.layer.cornerRadius = 7.0;


return cell;
}

最佳答案

  1. 如果您注释掉执行 setImageWithURL 的整段代码,您是否会在表格的所有行上成功获得动画事件指示器?让我们首先确保您的 UIActivityIndi​​catorView 工作正常。如果在您注释掉 setImageWithURL 时它有效,那么问题显然就在那里。如果它不起作用,即使您禁用了 setImageWithURL,那么您还有一个更根本的问题。让我们确保您成功启动事件指示器。我了解到您正在 IB 中打开它,但我真的建议您在 cellForRowAtIndexPath 中手动打开它(在适当的时候),而不是依赖它为您启动。

  2. 在你完成的 block 中,你真的应该检查以确保有问题的单元格仍在屏幕上并且没有被出队和重新使用(例如调用 cell = [tableView cellForRowAtIndexPath:indexPath] 并确认非 nil 值),因为我假设您的 setImageWithURL 是异步运行的。 (注意:此 UITableView 实例方法 cellForRowAtIndexPath 不应与名称相似的 UITableViewController 方法混淆。)这种关于假设的逻辑每当您对 tableview 单元格执行异步操作时,单元格仍在屏幕上可能会出现问题。当我听说某些异步更新没有正确更新这一事实时,我担心出列的单元格。 (请参阅我关于此 Stack Overflow Answer 的第 3 点,以获取有关如何检查单元格是否仍然可见的示例;这是一个略有不同的答案,但为您提供了一个您需要考虑的问题的示例。 )

  3. 无关,但我不会每次都添加 UITapGestureRecognizer。你不是在冒一个已经出列并重复使用了十几次的 cell 和十几个点击手势识别器的风险吗?最好在您的 UITableViewCell 子类中执行此操作。我通常在 layoutSubviews 中执行此操作(如果您尝试在 init 方法中执行此操作将不起作用,因为 imageview 尚不存在)。

关于iphone - Storyboard中自定义单元格中的 UIActivity 指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com