【问题标题】:Deselect row of a UITableViewController's UITableView when embedded in a PageViewController嵌入 PageViewController 时取消选择 UITableViewController 的 UITableView 的行
【发布时间】:2017-01-12 01:55:08
【问题描述】:

通常,当嵌入在UINavigationController 中的UITableViewController 从其详细信息屏幕返回时,先前选择的行的突出显示会消失。

UITableViewControllerUIPageViewController 加载时,我试图复制这种行为,但到目前为止一直没有成功。

需要明确的是,我在详细信息屏幕中的层次结构是:UINavigationController>UIPageViewController>UITableViewController>DetailController

不调用UITableViewControllerviewDidAppear中的deselectRow:atIndexPath:表视图方法为viewDidAppear。将其放在相同的方法中,但 UIPageViewController 可以工作,但在选择消失之前存在明显的延迟。

有人设法让它正常工作吗?

【问题讨论】:

  • 遇到同样的问题...修复后会回答(接下来 30 分钟)

标签: ios uitableview uipageviewcontroller


【解决方案1】:

你指的是UITableView还是UITableViewController这里

我试图复制这种行为,当 UITableViewController 是由 UINavigationController 加载的,但目前没有成功。

如果它是一个UITableViewController,那么它有这个clearsSelectionOnViewWillAppear 属性可以为你做这件事。它默认为true

【讨论】:

  • 问题是在这种情况下没有被调用。我会用层次结构更新我的问题
【解决方案2】:

不是一个理想的解决方案,但这对我有用...

表格视图控制器代码更改:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.tableView.reloadData()   //added this
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "appCell") as! AppTableViewCell
    cell.app = apps[indexPath.row]
    cell.delegate = self
    cell.reset()    //added this
    return cell
}

表格视图单元格代码更改:

//added this method
func reset() {
    shortcutTypesTableView.reloadData()
}

基本上,我正在重新加载整个顶部表格视图,并且在 tableView(_:cellForRowAt:) 中我告诉每个单元格重置,这会强制每个单元格的表格视图也重新加载。

加载此表格视图时(至少目前)我的应用程序没有太多开销,因此我没有注意到性能差异。但是,我不会将此解决方案称为性能“理想”。

【讨论】:

  • viewWillAppear 永远不会为我打电话
猜你喜欢
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多