导航后,UITableView滚动到选定的单元格

时间:2017-05-28 18:54:07

标签: ios swift uitableview

我有一个表View从后端获取远程数据,这一切都运行正常,我想要完成的是当用户点击任何单元格导航到其他ViewController(细节控制器)并按下后退按钮时表格视图应滚动到所选单元格而不是返回顶部我尝试tableView.scrollToRow,如下所示,但它不起作用?我知道我在加载数据函数中调用tableView.reloadData(),否则它将无法加载

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
    }

}

非常感谢任何帮助或想法

2 个答案:

答案 0 :(得分:1)

viewDidLoad仅在视图控制器初始化时调用一次,而不是在导航堆栈上弹出视图控制器时调用。致电LoadData()viewDidLayoutSubviews

override func viewDidLayoutSubviews() {
    LoadData()
}

答案 1 :(得分:1)

当您返回初始视图控制器时,您不需要再次获取数据。只需使用[Api("Test request")] [Route("/test/{Input}", "GET")] [Route("/test")] public class TestRequest : IReturn<TestResponse> { [ApiMember(Name = "Parameter name", Description = "Parameter Description", ParameterType = "body", DataType = "string", IsRequired = true)] public string Input { get; set; } } public class TestResponse { public string Output { get; set; } } public class MyServices : Service { public object Any(TestRequest request) => new TestResponse(); } 方法即可。获取ViewWillAppear并滚动表格视图。

celloffset