2017-05-28 10 views
0

私はテーブルを持っています。バックエンドからリモートデータを取得するビューは、すべて正常に動作しています。ユーザーが任意のセルをクリックして他のViewController(詳細コントローラ)戻るボタンを押すと、テーブルビューは選択されたセルにスクロールされ、上に戻ることはありません。以下に示すようにtableView.scrollToRowを試しましたが、動作しません。私は、任意のヘルプやアイデアがはるかにUITableViewナビゲーション後に選択されたセルにスクロール

答えて

1

viewDidLoadのみのビューコントローラの初期化時に一度呼び出され理解されるであろう、私はそれが

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 
    } 

} 

をロードしません賢明な他の私のデータをロードする機能でtableView.reloadData()を呼んでいることを知りませんナビゲーションスタック上でビューコントローラをポップするとき。あなたが最初のビューコントローラに戻って来ているときviewDidLayoutSubviews

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

お返事に感謝し、私はその理由、エラー ' 'NSRangeException' の下に取得しています:「 - [のUITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]:セクションの境界(5)(0)を越えて行(7) 。 '' –

+0

存在しない行にスクロールしようとしています。 –

+0

私はその意味を知っています、私の配列は、私がデータを再読み込みしているので、私はその考えていると思います! –

1

LoadData() を呼び出し、その後、再びデータをフェッチする必要はありません。単に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

返信いただきありがとうございますが、テーブルビューに戻ったときにデータを再度読み込まない方法について詳しく説明できますか?私は配列にデータを格納しています。テーブルビューに戻ると、この配列は再作成されますので、データを再読み込みする必要があります –

関連する問題