私のアプリでは、1つの画面にテーブルビューがあり、スワイプUITableViewCell
に「編集」および「削除」ボタンが表示されます。
すべて正常に動作していますが、問題はiOS11のUITableViewCell
のデフォルトのアニメーションにあります。
IOS 11でいくつかの動作と基金が変更されていることを知っています。セルをスワイプするためにプルを続けると、editActionsForRowAt
メソッドが自動的に呼び出されます。
良い場合もありますが、テーブルに複数のボタンを追加すると、スワイプして醜い動作に見えます。
以下のiOS10およびiOS11でのスワイプセルのデフォルトの動作をご覧ください。
iOS 10:
iOS 11:
iOS 11
で、プルしてスワイプすると、自動的にeditActionsForRowAt
メソッドが呼び出されてアラートメッセージが表示されます。
私の質問:iOS 11のこの動作を停止し、そのためのコードを作成する理由はありますか?
テーブルに2つ以上のボタンがある場合は、見栄えが悪いためです。
これはあなたが探していることをしているようです。ただし、アニメーションはiOS 10とまったく同じではありませんが、完全にスワイプする必要がなく、見栄えもよくなります。
_@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let deleteAction = UIContextualAction.init(style: UIContextualAction.Style.destructive, title: "Delete", handler: { (action, view, completion) in
//TODO: Delete
completion(true)
})
let editAction = UIContextualAction.init(style: UIContextualAction.Style.normal, title: "Edit", handler: { (action, view, completion) in
//TODO: Edit
completion(true)
})
let config = UISwipeActionsConfiguration(actions: [deleteAction, editAction])
config.performsFirstActionWithFullSwipe = false
return config
}
_
キーラインは_config.performsFirstActionWithFullSwipe = false
_です。これにより、フルスワイプが無効になります。
上記のコードはiOS11のfunc tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath)
をオーバーライドしますが、editActionsforRowAt
は引き続きサブiOS10デバイスで使用されます。