iOS启动活动指标仅排1行

时间:2015-02-05 19:45:44

标签: ios objective-c uitableview

我得到了简单的tableview,并且每个单元格都有活动指示器但是当我点击按钮上的行按钮alpha获得0并且指示符alpha得到1这样

if (webserviceRunningValueInt == 1)
{
    cell.unBlockUserButtonOutlet.alpha = 0;
    cell.waitIndicator.alpha = 1;
    [cell.waitIndicator startAnimating];
}
else
{
     cell.waitIndicator.alpha = 0;
     [cell.waitIndicator stopAnimating];
     cell.unBlockUserButtonOutlet.alpha = 1;
}

此代码部分工作但活动指示器在所有行上开始动画:)我怎样才能将此过程设置为仅1行

1 个答案:

答案 0 :(得分:1)

希望我能正确理解你的问题:你想点击一个单元格并让一个活动指示器开始制作动画?

我个人不打算在所有这些上都有一个活动指示器,然后隐藏和揭示它们,这使得开始和停止正确的指标有点痛苦。

我在其他应用程序中如何完成它是在didSelectRow阶段向单元格添加一个指示器,因为我们可以知道我们点击了哪个单元格并立即添加了一个单元格:

- (void)tableView:(UITableView *)tableView_ didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    [tableView_ reloadData];

    // This code will create and add an activity indicator
    UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    UITableViewCell * cell = [tableView_ cellForRowAtIndexPath:indexPath];

    cell.accessoryView = activityIndicator;
    [activityIndicator startAnimating];

    [tableView_ deselectRowAtIndexPath:indexPath animated:YES];
}

关于这段代码的巧妙之处在于,因为我们在创建单元格时不添加活动指示符意味着我们可以通过刷新tableView来删除指标。在这种情况下,每次点击我们都会删除上一个指标并添加一个新指标。

希望这有点帮助

编辑:如果你想通过按下单元格中的按钮来实现这一点(感谢弗拉基米尔为此answer

这很简单,可以使用上面的代码。

创建单元格时向目标添加目标:

[button addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

这将使我们能够找到按下按钮的时间

- (void)checkButtonTapped:(id)sender {

    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];

    // Now we have the indexPath of the cell clicked so we can use the previous code again

    [tableView_ reloadData];

    UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    UITableViewCell * cell = [tableView_ cellForRowAtIndexPath:indexPath];

    cell.accessoryView = activityIndicator;
    [activityIndicator startAnimating];    
}