web-dev-qa-db-ja.com

iOS11はスワイプUITableViewCellのデフォルトの動作を停止します

私のアプリでは、1つの画面にテーブルビューがあり、スワイプUITableViewCell「編集」および「削除」ボタンが表示されます。

すべて正常に動作していますが、問題はiOS11のUITableViewCellのデフォルトのアニメーションにあります。

IOS 11でいくつかの動作と基金が変更されていることを知っています。セルをスワイプするためにプルを続けると、editActionsForRowAtメソッドが自動的に呼び出されます。

良い場合もありますが、テーブルに複数のボタンを追加すると、スワイプして醜い動作に見えます。

以下のiOS10およびiOS11でのスワイプセルのデフォルトの動作をご覧ください。

iOS 10:

enter image description here

iOS 11:

enter image description here

iOS 11で、プルしてスワイプすると、自動的にeditActionsForRowAtメソッドが呼び出されてアラートメッセージが表示されます。

私の質問:iOS 11のこの動作を停止し、そのためのコードを作成する理由はありますか?

テーブルに2つ以上のボタンがある場合は、見栄えが悪いためです。

15
iPatel

これはあなたが探していることをしているようです。ただし、アニメーションは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デバイスで使用されます。

20
Micah Wilson