如何用两个"标签"更好地实现UITableView?

Sha*_* Of 5 objective-c uitableview ios swift

两个表必须位于一个视图控制器中,例如通过段控制进行切换.数据是无限的,从核心数据中获取.我看到三个解决方案:

1)创建两个对象UITableView并在共享数据源函数中填充它们; 保持其中一个tableviews隐藏

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
    }
}
Run Code Online (Sandbox Code Playgroud)

Anb*_*hik 5

选项号third很简单,内存优化也很好,在我的建议中使用tagConcept with single tableView如果你选择任何段为你的tableview分配标签(例如yourtableview.tag = 1)并同时改变你需要的帧,

更新

func segmentValueChanged(sender: UISegmentedControl) {
tableViewOffsets[tableView.tag] = tableView.contentOffset
tableView.tag = sender.selectedSegmentIndex
var tablearray = [string]()
 if sender.selectedSegmentIndex ==  0
{
  // here fecth the value in coredata and append in array
 tablearray.append (yourdta)
 }else
  {
  // here fecth the value in coredata and append in array
    tablearray.append (yourdta)
  }


if let savedOffset = tableViewOffsets[tableView.tag] {
    tableView.setContentOffset(savedOffset, animated: false)
}
tableView.reloadData()
}

func tableView_dataSourceMethodsTemplate(tableView: UITableView, ...)    {
 return tablearray.count
}
Run Code Online (Sandbox Code Playgroud)