iOS 11の方法でテーブルビューの行にスワイプアクションを追加しようとしています。行を削除するアクションを追加したいと思います。UITableView - データを再読み込みしないUIContextualAction
class ViewController: UIViewController {
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}
Iが行を選択すると、私はnumbers
の関連した値を出力:
私のテストテーブルビューディスプレイ番号0から9まで、データ・ソースが整数の単純なアレイである、numbers
と呼ば
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let delete = UIContextualAction(style: .destructive, title: "Delete") { (_, _, completionHandler) in
self.numbers.remove(at: indexPath.row)
completionHandler(true)
}
return UISwipeActionsConfiguration(actions: [delete])
}
:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print(numbers[indexPath.row])
tableView.deselectRow(at: indexPath, animated: true)
}
私は以下のように新しいデリゲートtrailingSwipeActionsConfigurationForRowAt
を実装します
行をスワイプすると、削除が正常に機能します。しかし、それは...私は削除した後に別の行を選択すると、関連するIndexPathが間違っている、
例私の問題だ:私は最初の行を選択し
- 、印刷された値が0である:OK。
- 最初の行を削除します。
- 新しい最初の行を選択すると、パラメータで渡されたIndexPathが行0ではなく行1であるため、印刷される値は2です。
私は間違ったやり方をしていますか?
ありがとうございます!私は、補完ハンドラの周りのドキュメントの不足によってかなり混乱しています。 'UIContextualAction'初期化子に渡されるクロージャーブロックの引数の1つとして、私たちが定義できるものではないと思いますか? – aganders3