UITableVIew滑动尾随SwipeActionsConfigurationForRowAt不起作用

时间:2018-07-09 07:42:02

标签: ios swift uitableview

新的iOS 11 UITableView滑动操作未被调用。 delegatedatasource在该表上工作正常。

我无法滑动并查看菜单项。

下面是我的代码。

func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let contextItem = UIContextualAction(style: .normal, title: "Leading & .normal") { (contextualAction, view, boolValue) in
        print("Leading Action style .normal")
    }
    let swipeActions = UISwipeActionsConfiguration(actions: [contextItem])

    return swipeActions
}

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let contextItem = UIContextualAction(style: .destructive, title: "Trailing & .destructive") { (contextualAction, view, boolValue) in
        print("Trailing Action style .destructive")
    }
    let swipeActions = UISwipeActionsConfiguration(actions: [contextItem])

    return swipeActions
}

我试图在下面打电话给它,并且工作正常。

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {

    }
}

高度赞赏任何正确方向的提示。

3 个答案:

答案 0 :(得分:3)

您需要在闭包true中将UIContextualAction传递到boolValue(true)。否则处理程序将不允许该操作。

func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let contextItem = UIContextualAction(style: .normal, title: "Leading & .normal") { (contextualAction, view, boolValue) in
        boolValue(true) // pass true if you want the handler to allow the action
        print("Leading Action style .normal")
    }
    let swipeActions = UISwipeActionsConfiguration(actions: [contextItem])

    return swipeActions
}

答案 1 :(得分:1)

代码看起来不错,但是您可能缺少Class声明中的“ UITableViewDelegate”和viewdidload()部分中的“ TableView.delegate = self”。所以它应该像这样:

{'total': 979,
 'detractors': 313,
 'passives': 291,
 'promoters': 375,
 'nps': 0.06332992849846783}

答案 2 :(得分:1)

对于那些使用 UITableViewDiffableDataSource 的人,您需要将其子类化并overridecanEditRowAt 方法。

public override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    true
}