2017-10-15 14 views
0

テーブルビューでは、削除機能を提供するためにfunc tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?を実装します。削除を確認して、削除またはキャンセルのプロンプトが表示されたらUIAlertControllerと表示します。ユーザがキャンセルを決定すると、セルは編集していない状態に戻ることになっています。通常これはtableView?.setEditing(false, animated: true)を呼び出すことによって機能しますが、これは長いスワイプでは機能しません。UITableViewスワイプの短いスワイプ対ロングスワイプの後の長いセルまたはリターンのセル

セルが完全にスワイプされても、理想的にはtableView?.setEditing(false, animated: true)を使用したいと考えています。

その他のオプションは、フルスワイプの確認を省略することですが、次にスワイプが長いか短いかを判断する方法が必要です。

どのようにこれらの結果を達成する方法ですか?

ありがとうございました

+0

私は間違っているかもしれませんが、setEditing(false animated:true)は短いスワイプでも何もしません。したがって、この問題はおそらく他の場所にあります。 –

答えて

0

私は今、同じ問題を扱っていました。私はすべてを試しましたが、解決は簡単でした。 UIContextualActionを作成するときは、ハンドラを1つのパラメータとして扱います。ハンドラはやや閉鎖に似ています。クロージャには3つの引数があります。最後は完了ハンドラです。単にあなたが完了したら、このハンドラをtrueで呼び出すと、あなたはすべて設定されます。それが助けてくれることを願っています

let removeHandler:UIContextualActionHandler = { (action, view, finished) in 
     let alert = UIAlertController(title: "Warning", message: "Do you really want to remove this?", preferredStyle: .alert) 

     let removeButton = UIAlertAction(title: "Remove", style: .destructive, handler: { (action) in 
      finished(true) 
      CameraManager.shared.removeCamera(index: indexPath.row) 
      tableView.deleteRows(at: [indexPath], with: .automatic) 
     }) 

     let cancelButton = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 

     alert.addAction(removeButton) 
     alert.addAction(cancelButton) 
     self.present(alert, animated: true) 
    } 
    let removeAction = UIContextualAction(style: .destructive, title: "Odstrániť", handler: removeHandler) 

    let conf = UISwipeActionsConfiguration(actions: [removeAction]) 
関連する問題