UITableViewAction有时冻结表

时间:2017-04-17 15:56:54

标签: ios objective-c uitableview

有时,当执行UITableAction的块时,整个UITableView会冻结,它不会响应点击或滚动。然而,页面的其余部分是响应式的。动作看起来像这样

-(NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
  __weak ServiceOrderDetailsViewController* weakSelf = self;

  UITableViewRowAction *button = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Mark as Complete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath)
                                {
                                    if (indexPath.section < weakSelf.sections.count && indexPath.row > 0)
                                    {
                                        NSString* key = weakSelf.sections[indexPath.section];

                                        if (indexPath.row - 1 < [weakSelf.datasource[key] count])
                                        {
                                            //Action
                                        }
                                    }

                                    dispatch_async(dispatch_get_main_queue(), ^
                                    {
                                        [weakSelf.UITableView_Bins setEditing:NO animated:YES];
                                        [weakSelf.UITableView_Bins beginUpdates];
                                        [weakSelf.UITableView_Bins reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
                                        [weakSelf.UITableView_Bins endUpdates];
                                    });

                                }];

button.backgroundColor = [UIColor InTrackGreenColor];

return @[button];
}

如果我删除了reloadRows,则不会出现此问题,但是单元格的内容不会更新。

1 个答案:

答案 0 :(得分:0)

所以我们发现了一个工作,我想我会分享。它是hackish,我宁愿找到更好的方法,但暂时它有效。

[self.UITableView_Bins performSelector:@selector(reloadData) withObject:nil afterDelay:0.25 inModes:@[NSDefaultRunLoopMode]];

延迟四分之一秒,我们避免了冻结问题。