web-dev-qa-db-ja.com

iOS11のテーブルビューセルでフルスワイプを無効にする方法

UITableViewDelegate.h

// Swipe actions
// These methods supersede -editActionsForRowAtIndexPath: if implemented
// return nil to get the default swipe actions
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);

ただし、trailingActionsメソッドでnilを返しているため、テーブルビューで完全にスワイプして削除できます。フルスワイプを防ぐにはどうすればよいですか? (ユーザーにスワイプしてから[削除]ボタンを押してもらう必要があります。

@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    return nil
}

編集:iOS 11/XCode 9/Swift 4の更新前にcanEditRowAtを実装し、編集スタイルをコミットしました。 TrailingSwipeActionsConfigurationForRowAtを実装する前であっても、完全なスワイプが有効になりました。

17
Megan Moreno

以下のように実装します:

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let delete = UIContextualAction(style: .destructive, title: "Delete") { (action, sourceView, completionHandler) in
        print("index path of delete: \(indexPath)")
        completionHandler(true)
    }
    let swipeAction = UISwipeActionsConfiguration(actions: [delete])
    swipeAction.performsFirstActionWithFullSwipe = false // This is the line which disables full swipe
    return swipeAction
}

これはフルスワイプを無効にする行です

swipeAction.performsFirstActionWithFullSwipe = false 

editingStyleeditActionsForRowAtのようなものを実装する場合は、他の関数を削除します。

27
Vini App

この回答に従うことで、特定のセルのスワイプ操作を無効にすることができました: https://stackoverflow.com/a/50597672/1072262

Nilを返す代わりに、以下を返すことができます。

return UISwipeActionsConfiguration.init()
2
virtas