2017-05-28 74 views
0

我有一個表查看從後端獲取遠程數據,這是所有工作正常,我試圖完成的是當用戶點擊任何單元格導航到其他ViewController(詳細控制器)當按下後退按鈕時,表格視圖應該滾動到選中的單元格而不回到頂部i'v如下所示嘗試tableView.scrollToRow,但它不起作用?我知道,我打電話給我的加載數據tableView.reloadData()工作的其他否則無法加載UITableView滾動到導航後選定的單元格

class feeds: UITableViewController { 
    var data = [AnyObject]() 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     LoadData() 
    } 


    override func numberOfSections(in tableView: UITableView) -> Int { 

     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return data.count 
    } 


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) 

     // configur tabl cell 

     return cell 
    } 

    func LoadData(){ 

    // Fetch Feeds to dataArray 
     // Reload UITable View 
     self.tableView.reloadData() 
     let celloffset = UserDefaults.standard.integer(forKey: "celloffset") 
     if celloffset != 0{ 
     let index = IndexPath(item: celloffset, section: 0) 
     self.tableView.scrollToRow(at: index, at: UITableViewScrollPosition.middle, animated: false) 
     } 
    } 


    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     UserDefaults.standard.set(indexPath.row, forKey: "celloffset") 

     // Navigate to Details VC 
    } 

} 

任何幫助或想法將非常感激

回答

1

viewDidLoad只調用一次在視圖控制器的初始化,不當在導航堆棧上彈出視圖控制器時。呼叫LoadData()viewDidLayoutSubviews

override func viewDidLayoutSubviews() { 
    LoadData() 
} 
+0

感謝您的回覆,但我發現了以下錯誤 ' 'NSRangeException',原因是:「 - [UITableView的_contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]:排(7)超越界限(5)部分(0) '' –

+0

您正在嘗試滾動到不存在的行。 –

+0

我知道它的意思,我的數組有25行後加載我選擇的單元格7當按下按鈕錯誤發生時 我認爲它是因爲數據重新加載! –

1

當你回來的初始視圖控制器,那麼你並不需要再次獲取數據。只需使用ViewWillAppear方法。獲取celloffset和滾動表格視圖。

let celloffset = UserDefaults.standard.integer(forKey: "celloffset") 
if celloffset != 0{ 
let index = IndexPath(item: celloffset, section: 0) 
self.tableView.scrollToRow(at: index, at: UITableViewScrollPosition.middle, animated: false)} 
+0

感謝您的回覆,但可以解釋更多如何不返回到表視圖時再次加載數據?我將數據存儲在一個數組中,當返回tableview時,這個數組將被重新創建,所以我必須重新加載數據 –

相關問題