Как оживить удаление ячейки из таблицы (rxswift)? - PullRequest
1 голос
/ 27 марта 2019

Когда пользователь проводит пальцем по ячейке, становится возможным ее удаление.Однако удаление происходит без анимации.

Часть кода в моем ViewController:

override func viewDidLoad() {
        super.viewDidLoad()

        guard let foodCategoryDetailViewModel = foodCategoryDetailViewModel else { return }

        tableView.delegate = nil
        tableView.dataSource = nil

        foodCategoryDetailViewModel.foodsInSelectedCategory
            .bind(to: tableView.rx.items(cellIdentifier: FoodCategoryDetailTableViewCell.cellIdentifier, cellType: FoodCategoryDetailTableViewCell.self))
            { row, food, cell in
                cell.foodCategoryDetailCellViewModel = foodCategoryDetailViewModel.cellViewModel(forRow: row)
            }.disposed(by: disposeBag)

        tableView.rx.itemDeleted.subscribe(onNext: { indexPath in
            foodCategoryDetailViewModel.removeFoodFromApplication(atRow: indexPath.row)
        }).disposed(by: disposeBag)
    }

Часть кода в моей ViewModel:

class FoodCategoryDetailTableViewViewModel: FoodCategoryDetailTableViewViewModelType {
    var foodsInSelectedCategory: BehaviorRelay<[Food]>

    func removeFoodFromApplication(atRow row: Int) {
        if let food = getFood(atRow: row) {
            foodsInSelectedCategory.remove(at: row)
            //remove from core data   
          CoreDataHelper.sharedInstance.removeFoodFromApplication(foodName: food.name!)
        }
    }

Как анимировать процесс удаления из tableView?

1 Ответ

1 голос
/ 28 марта 2019

Для того, чтобы оживить процесс удаления, вам необходим источник данных, предназначенный для этого.Источником данных по умолчанию в RxSwift не является.

Самая популярная библиотека для таких вещей - RxDataSources, которая включает полнофункциональную многосекционную систему для анимации представлений таблиц и коллекций, но если вам не нужно что-то, чтоВы можете легко написать свой собственный.

Вот пример простого анимируемого источника данных для RxSwift, который использует DifferenceKit для расчета, какие ячейки должны быть включены / выключены: (https://github.com/danielt1263/RxMultiCounter/blob/master/RxMultiCounter/RxExtensions/RxSimpleAnimatableDataSource.swift)

...