1

我创建了一个带有隐藏微调器和隐藏文本“加载更多”的自定义单元格。对于最后一个单元格,这些字段未隐藏,以便用户可以单击它来请求更多数据。我让它醒来,以便当用户单击最后一个单元格时微调器启动,但是当用户将单元格滚动出视图并再次返回时,微调器不会显示。任何帮助将不胜感激。:)

我有一个自定义单元格,它是 UITableViewCell 的子类:

@interface BrowseListCell : UITableViewCell{
IBOutlet UIImageView *image;
IBOutlet UILabel *name;
IBOutlet UILabel *loadMore;
IBOutlet UIActivityIndicatorView *spinner;
}
@property(nonatomic, retain) UIImageView *image;
@property(nonatomic, retain) UILabel *name;
@property(nonatomic, retain) UILabel *loadMore;
@property(nonatomic, retain) UIActivityIndicatorView *spinner;
@end

在 tableViewController 我有:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//#warning Incomplete method implementation.
// Return the number of rows in the section.
return [_dataController countOfList]+1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
{

// Configure the cell...
static NSString *CellIdentifier = @"BrowseListCell";

BrowseListCell *cell = (BrowseListCell *)[tableView     dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
    cell = [_cell autorelease];
    _cell = nil;
}
if(indexPath.row==[_dataController countOfList]){
    if (indexPath.row==0) {
        cell.name.text=nil;
        cell.image.image = nil;
        cell.loadMore.hidden = YES;
        return cell;
    }else{
        cell.name.text=nil;
        cell.image.image = nil;
        cell.loadMore.hidden = NO;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        _spinner = [cell.spinner retain];
        _loadCell = [cell retain];
        return cell;
    }
}
if(_dataController!=nil){
    BrowseProduct *productAtIndex = [_dataController objectInListAtIndex:indexPath.row];

    // Configure the cell...
    if(productAtIndex!=nil){
        cell.name.text = productAtIndex.name;
        cell.image.image = productAtIndex.image;
        cell.loadMore.hidden=YES;
    }

}

return cell;

}

在 didSelectRowAtIndexPath 里面我有:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row==[_dataController countOfList]){
    if (indexPath.row==0) {
        //do nothing
    }else{
        NSLog(@"Loading");
        [_spinner startAnimating];
        _loadCell.userInteractionEnabled = NO;
        NSString *startFromId = [NSString stringWithFormat:@"%d", [_dataController countOfList]];
        NSNotification *notification = [NSNotification notificationWithName:@"loadMore" object:startFromId];
        [[NSNotificationCenter defaultCenter]postNotification:notification];
    }
  }
}
4

4 回答 4

1

添加此代码,即使在停止动画后也显示微调器

 spinner.hidesWhenStopped = NO;

请参考UIActivityIndi​​catorView的苹果链接

于 2013-04-08T04:59:07.527 回答
1

为 cellForRowAtIndexPath 添加了以下内容:

if(spinnerIsOn){
            [_spinner startAnimating];
        }else{
            [_spinner stopAnimating];
        }

在 reloadTableViewData 中添加了以下内容:

spinnerIsOn=NO;

在 didSelectRowAtIndexPath 中添加了以下内容:

spinnerIsOn = TRUE;
于 2013-04-11T07:00:08.307 回答
0

你也可以继承 layoutSubviews

- (void)layoutSubviews{
    [super layoutSubviews];
    [self.spinner startAnimating];
}
于 2015-01-13T15:24:18.577 回答
0

我遇到了同样的问题。解决方案:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

    cell.spinner.startAnimating()

    // populate data, for instance: download an image from the net

    cell.spinner.stopAnimating()

    return cell
}

当然,spinner.hidesWhenStopped必须是true,默认情况下。

于 2019-02-24T16:57:07.803 回答