2017-02-27 36 views
2

我是RX Swift的新手,需要在表格視圖中顯示數據,以便它自動顯示錶格的最後一個單元格(默認滾動到底部)。 這裏是我的代碼將數據綁定:自動將UITableView滾動到Rx的底部Swift

private var dataArray = Variable<[Message]>([]) 
private let bag = DisposeBag() 

dataArray.asObservable() 
    .bindTo(tableView.rx.items) { (tableView, row, msg) in 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! 

     cell.textLabel?.text = obj.title 
     return cell 
    } 
    .addDisposableTo(bag) 

該代碼顯示的數據表視圖,但每次添加一個新的電池時間不滾動表視圖底部。我可能需要添加下面的行,但不知道要使用哪個rx-swift運算符?

tableView.setContentOffset(CGPoint(x: 0, y : CGFloat.greatestFiniteMagnitude), animated: true) 

在此先感謝。

在相關說明中,如果有人能夠推薦我們可以參考的rx-swift中製作的一個很好的開源示例項目,我們將非常感激。

回答

2

您會希望每次設置內容偏移量dataArray會發出一個新值。

一個很好的解決方案,然後將

dataArray.asObservable().map { CGPoint(x: 0, y: CGFloat.greatestFiniteMagnitude) } 
    .bindTo(tableView.rx.contentOffset) 
    .addDisposableTo(bag) 

否則,你可以簡單地做

dataArray.asObservable() 
    .do(onNext: { 
     self.tableView.setContentOffset(CGPoint(x: 0, y : CGFloat.greatestFiniteMagnitude), animated: true) 
    }) 
    .bindTo(tableView.rx.items) { (tableView, row, msg) in 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! 

     cell.textLabel?.text = obj.title 
     return cell 
    } 
    .addDisposableTo(bag) 

do(onNext:)用於執行副作用時,可觀察到發射的值。那些副作用將發生每個用戶一次。

+0

感謝Tomahh,使用do(onNext)爲我工作,但它顯示使用以下代碼得到解決的錯誤:.do(onNext:{[無主自我]查詢 tableView.setContentOffset(CGPoint(x:0,y :CGFloat.greatestFiniteMagnitude),animated:true) }) –