2017-10-09 120 views
0

我在单元格中有一个自定义按钮,它从可观察列表中删除项目。RxSwift,用动画去除单元格

self.searchListViewModel.genericList.value.remove(at: index) 

所有的逻辑工作得很好,但我需要一个动画删除cell.Something这样

self.tableView.deleteRows(at: [IndexPath(row: index, section: 0)], 
with: .fade) 

但现在如果我想同时使用,应用程序崩溃。

+0

您必须为此使用AnimatableSectionModel。数据源插入或删除将被照顾。 RxDataSources – Aks

+0

嗨阿克斯 你能请示例,我该如何使用它,无法找到任何示例谢谢。 –

回答

1

对不起。这里是rxswift中动画tableview的例子。

enum MySectionItem { 

     case a(presentable: APresentable) 
     case b(presentable: BPresentable) 
     case c(presentable: CPresentable) 
    } 

    extension MySectionItem: IdentifiableType, Equatable { 
     typealias Identity = String 

     var identity: Identity { 
      switch self { 
      case let .a(presentable): 
       return presentable.title //Something which can define uniqueness 
      case let .b(presentable): 
       return presentable.title 
      case let .c(presentable): 
       return presentable.title 
      } 
     } 
    } 

对于SectionModel也可以这样做。

enum MySectionModel { 

     case a(title: String, items: [MySectionItem]) 
     case b(title: String, items: [MySectionItem]) 
     case c(title: String, items: [MySectionItem]) 
    } 

    extension MySectionModel: AnimatableSectionModelType { 
     typealias Item = MySectionItem 

     var items: [Item] { 
      switch self { 
      case let .a(title: _, items: items), 
       let .b(title: _, items: items), 
       let .c(title: _, items: items): 

       return items.map { $0 } 
      } 
     } 

     var identity: String { 
      switch self { 
      case let .a(title: title, items: _), 
       let .b(title: title, items: _), 
       let .c(title: title, items: _): 

       return title 
      } 
     } 

     init(original: MySectionModel, items: [Item]) { 
      switch original { 
      case let .a(title: title, items: _): 
       self = .a(title: title, items: items) 
      case let .b(title: title, items: _): 
       self = .b(title: title, items: items) 
      case let .c(title: title, items: _): 
       self = .c(title: title, items: items) 
      } 
     } 
    }