Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView导航后滚动至所选单元格_Ios_Swift_Uitableview - Fatal编程技术网

Ios UITableView导航后滚动至所选单元格

Ios UITableView导航后滚动至所选单元格,ios,swift,uitableview,Ios,Swift,Uitableview,我有一个从后端获取远程数据的表视图,这一切都很正常,我试图完成的是当用户单击任何单元格导航到其他ViewController(details controller)时当按下后退按钮时,表格视图应该滚动到所选单元格,而不是返回顶部。我尝试了表格视图。滚动箭头如下所示,但它不工作?我知道我正在加载数据函数中调用tableView.reloadData(),否则它不会加载 class feeds: UITableViewController { var data = [AnyObject]()

我有一个从后端获取远程数据的表视图,这一切都很正常,我试图完成的是当用户单击任何单元格导航到其他ViewController(details controller)时当按下后退按钮时,表格视图应该滚动到所选单元格,而不是返回顶部。我尝试了
表格视图。滚动箭头
如下所示,但它不工作?我知道我正在加载数据函数中调用
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
    }

}

非常感谢任何帮助或想法

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

override func viewDidLayoutSubviews() {
    LoadData()
}

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

override func viewDidLayoutSubviews() {
    LoadData()
}

当您回到初始视图控制器时,就不需要再次获取数据。只需使用
视图就会出现
方法。获取
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)}

当您回到初始视图控制器时,就不需要再次获取数据。只需使用
视图就会出现
方法。获取
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)}

感谢您的回复,但是可以解释一下当返回到表视图时如何不再加载数据吗?我将数据存储在一个数组中,当返回到tableview时,该数组将被重新创建,因此我必须重新加载数据感谢您的回复,但可以进一步解释如何在返回到table view时不再加载数据?我将数据存储在一个数组中,当返回到tableview时,此数组将被重新创建,因此我必须重新加载数据感谢您的回复,但我得到以下错误
'NSRangeException',原因:'-[UITableView\u contentoffsetforcrollingtorowatindexpath:atScrollPosition::第(7)行超出第(0)节的界限(5).
您正试图滚动到一个不存在的行。我知道这是什么意思,加载后我的数组有25行。我选择了7号单元格,按下“上一步”按钮时出错了。我想是因为数据正在重新加载!如果我删除它,表视图将不会显示任何感谢您的回复,但我会在下面看到错误
'NSRangeException',原因:'-[UITableView\u contentoffsetforcrollingtorowatindexpath:atScrollPosition:::]:第(7)行超出了第(0)节的边界(5)。
您正在尝试滚动到一个不存在的行。我知道这是什么意思,我的数组在加载后有25行我选择了7号单元格当按“上一步”按钮时出现错误我想是因为数据正在重新加载!如果删除它,表视图将不显示任何内容