2017-01-14 4 views
0

바인딩 : 행이 삭제 될 때까지RxSwift - 텍스트 필드 변수 내가 RxSwift 새로운 그리고 난 설정이 코드에게 텍스트 필드가 포함 된 tableview에 가지고있는 tableview

budget.expenses.asObservable() 
    .bindTo(tableView.rx.items(cellIdentifier: ExpenseInputCell.cellIdentifier, cellType: ExpenseInputCell.self)){(row, element, cell) in 

    cell.name.text = element.name.value 
    cell.name.rx.text 
    .bindTo(element.name) 
    .addDisposableTo(self.disposeBag) 
} 
.addDisposableTo(disposeBag) 

tableView.rx.itemDeleted 
    .subscribe(onNext: {indexPath in 
    self.budget.expenses.value.remove(at: indexPath.row) 
    }) 
    .addDisposableTo(disposeBag) 

모든 것이 잘 작동을, 다음 때문에 텍스트 필드가 배열의 올바른 객체에 바인딩됩니다. 예를 들어 테이블 뷰에 7 개의 항목이 있고 5 번째 행을 삭제한다고 가정하면 새로운 5 번째와 6 번째 행은 모두 동일한 값을 갖습니다.

답변

4

문제는 element.name의 구독주기에 있습니다. self.disposeBag에 연결되어 있기 때문에 셀을 다시 사용할 때 해제되지 않지만, self 인 경우에는 해제되지 않습니다.

새 처분 가방을 ExpenseInputCell에 노출하고 셀의 prepareForReuse 방법으로 갱신하고 싶을 것입니다.

class ExpenseInputCell: UITableViewCell { 
    // .. 

    var disposeBag = DisposeBag() 

    override func prepareForReuse() { 
    self.diposeBag = DisposeBag() 
    } 
} 

볼 제어기

budget.expenses.asObservable() 
    .bindTo(tableView.rx.items(cellIdentifier: ExpenseInputCell.cellIdentifier, cellType: ExpenseInputCell.self)){(row, element, cell) in 

    cell.name.text = element.name.value 
    cell.name.rx.text 
    .bindTo(element.name) 
    .addDisposableTo(cell.disposeBag) 
} 
.addDisposableTo(disposeBag)