diff --git a/RxExample/RxExample/Examples/TableViewWithEditingCommands/TableViewWithEditingCommandsViewController.swift b/RxExample/RxExample/Examples/TableViewWithEditingCommands/TableViewWithEditingCommandsViewController.swift index 02cecd91..7c18d925 100644 --- a/RxExample/RxExample/Examples/TableViewWithEditingCommands/TableViewWithEditingCommandsViewController.swift +++ b/RxExample/RxExample/Examples/TableViewWithEditingCommands/TableViewWithEditingCommandsViewController.swift @@ -84,7 +84,14 @@ class TableViewWithEditingCommandsViewController: ViewController, UITableViewDel .observeOn(MainScheduler.instance) let deleteUserCommand = tableView.rx_itemDeleted.map(TableViewEditingCommand.DeleteUser) - let moveUserCommand = tableView.rx_itemMoved.map(TableViewEditingCommand.MoveUser) + let moveUserCommand = tableView + .rx_itemMoved + // This is needed because rx_itemMoved is being performed before delegate method is + // delegated to RxDataSource. + // This observeOn makes sure data is rebound after automatic move is performed in data source. + // This will be improved in RxSwift 3.0 when order will be inversed. + .observeOn(MainScheduler.asyncInstance) + .map(TableViewEditingCommand.MoveUser) let initialState = TableViewEditingCommandsViewModel(favoriteUsers: [], users: []) @@ -171,6 +178,10 @@ class TableViewWithEditingCommandsViewController: ViewController, UITableViewDel return true } + dataSource.canMoveRowAtIndexPath = { _ in + return true + } + return dataSource }