如何在Custom UITableviewCell按钮上添加Activity Indicator?

时间:2014-01-17 06:23:32

标签: ios uitableview uiactivityindicatorview

我的自定义tableview单元格按钮单击事件在所选单元格按钮上有加载活动指示符时出现问题。 如果您有链接或其他来源,请帮助我。 我是iOS开发的新手。

2 个答案:

答案 0 :(得分:4)

这非常简单,因为它不涉及任何第三方内容(即使MBProgressHUD是一个很棒的工具)。当我创建单元格时,我创建了一个UIACtivityIndi​​catorView并将其添加为单元格的accessoryView。稍后,当按下一行时,我在相应的indexPath处获取对单元格本身的引用,然后访问其accessoryView属性,即指示器视图。从那里你可以告诉它开始制作动画。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];

        UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

        cell.accessoryView = activityIndicator;
    }
    cell.textLabel.text = _items[indexPath.row];

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // deselect the row if you want the cell to fade out automatically after tapping
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    // get a reference to the cell that the user tapped
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    // get the tapped cell's accessory view and cast it as the activity indicator view
    UIActivityIndicatorView *activityIndicator = (UIActivityIndicatorView *)cell.accessoryView;

    // tell it to start animating
    [activityIndicator startAnimating];
}

点击第一个单元格后会产生以下结果:

enter image description here

根据您希望停止活动指示器旋转的时间/方式,您必须稍微更改一下代码,但如果没有更多信息,这是我能提供的最佳信息。您可能希望将indexPath.row整数添加到progressView的标记属性中,但还有更多内容。希望这有帮助!

修改

将标记添加到该行的indexPath按钮,并执行以下操作:

- (void)showProgressViewForButton:(id)sender {
    NSInteger tappedCellIndex = sender.tag;

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:tappedCellIndex inSection:0];

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

    UIActivityIndicatorView *activityIndicator = (UIActivityIndicatorView *)cell.accessoryView;

    [activityIndicator startAnimating];
}

答案 1 :(得分:0)

这是MBProgressHUD的链接:

https://github.com/jdg/MBProgressHUD