2017-09-25 4 views
7
でテーブルビューのセルに完全なスワイプを無効にする

UITableViewDelegate.hどのように私はiOS11

// 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 
} 

EDIT:私はcanEditRowAtを実施し、iOSの11/XCodeの9 /スウィフト4更新前の編集スタイルをコミットフルスワイプでした。私はtrailingSwipeActionsConfigurationForRowAtを実装する前であっても有効

+0

アクションを編集するのではなく、このケースでスワイプアクションを使用する理由はありますか?編集アクションは、iOS 8.0以降ではなく、iOS 11.0以降に対応しているため、最近のiOSバージョンにアップグレードされていないデバイスにも柔軟性がもたらされます。私はあなたの質問に対する答えではなく、明確な点としてこれを意味します。 –

+0

私は実際に編集アクションを使用していました。私はcanEditRowAtを実装し、Styleをコミットしました。しかし何らかの理由で(たとえtrailingSwipeActionsConfigurationForRowAtを実装する前であっても)、フルスワイプが有効になりました。私はこれを含むように私の質問を更新しています –

答えて

9

を以下のように実装します。これは、完全なスワイプを無効ラインである

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のようなものを実装する場合は、他の機能を削除してください。

+0

コミットeditingStyle関数の前にいくつかのロジックがありました。これは、そのロジックをUIContextualActionのコードブロックに転送することを意味しますか?これはうまくいくようですが、それがベストプラクティスであるかどうかは疑問です。 –

+0

ここでこのロジックを転送する必要があります。 –