如何动画从表视图(rxswift)中删除单元格?
How to animate deleting cell from tableview (rxswift)?
当用户滑动单元格时,可以将其删除。但是,删除操作没有动画。
我的部分代码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 中删除的过程?
为了动画化删除过程,您需要一个专门为此设计的数据源。 RxSwift 中的默认数据源不是。
这种东西最受欢迎的库是 RxDataSources,它引入了一个完整的多部分系统来动画 table 和集合视图,但是如果你不想要那么复杂的东西,你可以很容易地自己写。
这是 RxSwift 的简单 animatable 数据源示例,它使用 DifferenceKit 计算哪些单元格必须设置动画 on/off:(https://github.com/danielt1263/RxMultiCounter/blob/master/RxMultiCounter/RxExtensions/RxSimpleAnimatableDataSource.swift)
当用户滑动单元格时,可以将其删除。但是,删除操作没有动画。
我的部分代码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 中删除的过程?
为了动画化删除过程,您需要一个专门为此设计的数据源。 RxSwift 中的默认数据源不是。
这种东西最受欢迎的库是 RxDataSources,它引入了一个完整的多部分系统来动画 table 和集合视图,但是如果你不想要那么复杂的东西,你可以很容易地自己写。
这是 RxSwift 的简单 animatable 数据源示例,它使用 DifferenceKit 计算哪些单元格必须设置动画 on/off:(https://github.com/danielt1263/RxMultiCounter/blob/master/RxMultiCounter/RxExtensions/RxSimpleAnimatableDataSource.swift)