如何动画从表格视图(rxswift)中删除单元格?
Posted
技术标签:
【中文标题】如何动画从表格视图(rxswift)中删除单元格?【英文标题】:How to animate deleting cell from tableview (rxswift)? 【发布时间】:2019-03-27 12:36:24 【问题描述】:当用户滑动单元格时,可以将其删除。但是,删除是在没有动画的情况下发生的。
我的 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】:为了使删除过程具有动画效果,您需要一个专门用于执行此操作的数据源。 RxSwift 中的默认数据源不是。
最流行的库是 RxDataSources,它带来了一个完整的多节系统,用于动画表和集合视图,但如果您不想要复杂的东西,您可以轻松编写自己的。
这是一个用于 RxSwift 的简单动画数据源示例,它使用 DifferenceKit 计算必须对哪些单元格进行动画开/关:(https://github.com/danielt1263/RxMultiCounter/blob/master/RxMultiCounter/RxExtensions/RxSimpleAnimatableDataSource.swift)
【讨论】:
以上是关于如何动画从表格视图(rxswift)中删除单元格?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 RxSwift 中为整个应用程序中的单元格和按钮设置动画?
删除按钮出现时自定义表格视图单元格中缺少 UISlider 宽度的动画
我应该如何访问有关用于使用RxSwift和MVVM填充表格视图的数组的数据