【发布时间】:2026-02-22 09:50:01
【问题描述】:
两个表必须在一个视图控制器中,例如通过段控制切换。数据是无限的,从核心数据中获取。我看到了三个解决方案:
1) 创建UITableView的两个对象,并将它们填充到共享数据源函数中;隐藏其中一个表视图
2) 创建两个视图控制器容器,嵌入到主视图控制器中,执行完全分离的数据源方法;隐藏其中一个容器
3) 仅使用一个表视图对象,在需要时重新加载数据,提供偏移量保存
需要您的意见。哪种解决方案会更快和/或更易读且正确?
更新
让我尝试实现第三个选项:
var tableViewOffsets = [Int: CGPoint]()
func segmentValueChanged(sender: UISegmentedControl) {
tableViewOffsets[tableView.tag] = tableView.contentOffset
tableView.tag = sender.selectedSegmentIndex
tableView.reloadData()
if let savedOffset = tableViewOffsets[tableView.tag] {
tableView.setContentOffset(savedOffset, animated: false)
}
}
func tableView_dataSourceMethodsTemplate(tableView: UITableView, ...) {
if tableView.tag == 0 {
//perform data source code for first tab
} else {
//perform data source code for second tab
}
}
【问题讨论】:
-
第三个选项将很有用,因为制作两个表意味着内存消耗更好地重新加载单个表。通过双端队列可重用内存将得到更好的利用。和速度将与其他选项相同。
标签: ios objective-c swift uitableview