2017-09-25 15 views
7

UITableViewDelegate.hLàm thế nào để vô hiệu hóa toàn bộ swipe trên một tế bào tableview trong 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); 

Tuy nhiên, tôi đang trở về con số không trong phương pháp trailingActions tôi và tôi vẫn có thể làm một swipe đầy đủ để xóa trong tableview tôi. Làm thế nào tôi có thể ngăn chặn các swipe đầy đủ? (Tôi muốn người dùng phải swipe sau đó nhấn "Xóa" nút

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

EDIT:.. Tôi đã thực hiện canEditRowAt và cam kết Chỉnh sửa phong cách trước khi iOS 11/XCode 9/Swift 4 bản cập nhật Các swipe đầy đủ là kích hoạt ngay cả trước khi tôi thực hiện các trailingSwipeActionsConfigurationForRowAt

+0

Có lý do nào khiến bạn đang sử dụng thao tác vuốt cho trường hợp này thay vì chỉnh sửa hành động không? Chỉnh sửa hành động có sẵn kể từ iOS 8.0+ thay vì bị giới hạn ở iOS 11.0+ vì vậy sẽ cung cấp tính linh hoạt hơn cho các thiết bị chưa được nâng cấp lên phiên bản iOS gần đây. Ý tôi là đây là một điểm làm rõ, không phải là câu trả lời cho câu hỏi của bạn. –

+0

Tôi thực sự đang sử dụng các tác vụ chỉnh sửa. Tôi đã triển khai canEditRowAt và cam kết chỉnh sửa Style. Nhưng vì một số lý do (ngay cả trước khi triển khai trailingSwipeActionsConfigurationForRowAt), thì việc vuốt toàn bộ đã được bật. Tôi đang cập nhật câu hỏi của mình để bao gồm –

Trả lời

9

thực hiện như dưới đây:.

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 
} 

Đây là dòng vô hiệu hóa hoàn toàn swipe

swipeAction.performsFirstActionWithFullSwipe = false 

Và xóa các chức năng khác nếu bạn triển khai bất kỳ chức năng nào như editingStyleeditActionsForRowAt.

+0

Tôi đã có một số logic trong hàm editStyle commit trước đây. Điều này có nghĩa là tôi chuyển logic đó vào khối mã của UIContextualAction? Điều này dường như làm việc, nhưng tôi tự hỏi nếu đó là thực hành tốt nhất. –

+0

Bạn phải chuyển logic này ở đây. –

Các vấn đề liên quan