2017-10-09 7 views
0

J'ai un bouton personnalisé dans une cellule, qui supprime l'élément de la liste observable.RxSwift, supprimer la cellule avec animation

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

Toute la logique fonctionne bien mais j'ai besoin d'une animation pour la suppression cell.Something comme celui-ci

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

mais pour l'instant si je suis en train d'utiliser les deux, application se bloque.

+0

Vous devez utiliser AnimatableSectionModel pour cela. L'insertion ou la suppression de la source de données sera prise en compte. RxDataSources – Aks

+0

Salut Aks Pourriez-vous s'il vous plaît montrer un exemple, de la façon dont je devrais l'utiliser, ne pourrait pas trouver un exemple Merci. –

Répondre

1

Désolé pour le retard. Voici l'exemple de tableview animable dans rxswift.

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 
      } 
     } 
    } 

Pour SectionModel vous pouvez également faire la même chose.

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) 
      } 
     } 
    }