Ios UITableView导航后滚动至所选单元格
我有一个从后端获取远程数据的表视图,这一切都很正常,我试图完成的是当用户单击任何单元格导航到其他ViewController(details controller)时当按下后退按钮时,表格视图应该滚动到所选单元格,而不是返回顶部。我尝试了Ios UITableView导航后滚动至所选单元格,ios,swift,uitableview,Ios,Swift,Uitableview,我有一个从后端获取远程数据的表视图,这一切都很正常,我试图完成的是当用户单击任何单元格导航到其他ViewController(details controller)时当按下后退按钮时,表格视图应该滚动到所选单元格,而不是返回顶部。我尝试了表格视图。滚动箭头如下所示,但它不工作?我知道我正在加载数据函数中调用tableView.reloadData(),否则它不会加载 class feeds: UITableViewController { var data = [AnyObject]()
表格视图。滚动箭头如下所示,但它不工作?我知道我正在加载数据函数中调用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号单元格当按“上一步”按钮时出现错误我想是因为数据正在重新加载!如果删除它,表视图将不显示任何内容