2017-04-17 9 views
0

UITableActionのブロックを実行すると、UITableView全体がフリーズすることがあります。タップやスクロールに応答しません。しかし、ページの残りの部分は応答性があります。この動作は次のようになりますUITableViewActionでテーブルがフリーズすることがある

-(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を削除すると、この問題は発生しませんが、セルの内容は更新されません。

答えて

0

私は私が共有すると思ったことを回避する方法を発見しました。それはハッキーで、私はより良い方法を見つけることを好むだろうが、当分の間はそれは機能する。

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

遅延を4分の1にすることで、フリーズの問題を回避します。

関連する問題