UITableView自定义删除按钮功能

时间:2017-02-13 16:47:25

标签: ios objective-c swift uitableview

作为默认行为,一旦你想要删除表格视图的任何单个单元格,你将点击cel左侧的删除按钮,删除确认按钮将显示在单元格的右侧,然后继续点击此按钮,此行将被删除。对于此行为,您需要有两个步骤来删除行。是否有任何方法只能点击删除按钮(在单元格左侧)删除单元格而不点击确认按钮?

2 个答案:

答案 0 :(得分:0)

您的意思是仅在交换时删除行吗?忽略删除按钮?

您可以使用 UISwipeGestureRecognizer ,如下所示:

class YourViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        var swipe = UISwipeGestureRecognizer(target: self, action: #selector(self.didSwipe))
        self.tableView.addGestureRecognizer(swipe)
    }

    func didSwipe(recognizer: UIGestureRecognizer) {

        if swipe.state == UIGestureRecognizerState.Ended {

            let swipeLocation = swipe.locationInView(self.tableView)

            if let swipedIndexPath = tableView.indexPathForRowAtPoint(swipeLocation) {

                if let swipedCell = self.tableView.cellForRowAtIndexPath(swipedIndexPath) {

                    self.cellObjectsArray.remove(at: swipedIndexPath.row)
                    tableView.deleteRows(at: [swipedIndexPath], with: .fade)
                }
            }
        }
    }

}

答案 1 :(得分:0)

您可以通过实现以下委托方法来删除单元格,但这是一个两步过程,

  1. 滑动单元格以找到右侧的删除确认按钮
  2. 点击删除(将调用commitEditingStyle
  3. 如果您想一步完成/点击,请在UITableViewCell及其选择器中添加自定义按钮,获取indexpath UITableViewCell删除对象来自数据源和重新加载表,这类似于commitEditingStyle方法中实现的代码。

    - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return @"Delete";
    }
    
    -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return UITableViewCellEditingStyleDelete;
    }
    
    - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        //Delete the object at `indexPath` from datasource
        //Update UI, by reloading section/entire table
    }