【问题标题】:iOS store selection for UITableViewCell?UITableViewCell 的 iOS 商店选择?
【发布时间】:2017-12-03 06:10:19
【问题描述】:

例如原生 iOS 应用程序 Mail 和 Notes:

1)如果您选择一个单元格 - 应用程序会推送视图控制器

2)如果您在第 1 步后单击返回按钮 - 应用弹出视图控制器,您会看到该单元格已被选中并通过动画取消选中

如何实现相同的行为?目前我需要将它添加到我的应用程序中的每个表中。

【问题讨论】:

  • 你尝试了什么?
  • 我唯一的想法是手动存储所选索引并根据此索引自定义单元格出现时。但是手动将此行为添加到每个屏幕/单元格将是一个地狱

标签: ios objective-c swift uitableview selection


【解决方案1】:

我假设您在 UIViewController 中使用 UITableView(而不是 UITableViewController,它具有您默认提到的行为)。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if let selectedIndexPath = tableView.indexPathForSelectedRow {
        tableView.deselectRow(at: selectedIndexPath, animated: true)
    }
}

【讨论】:

  • 问题是当您使用带有可重用单元格的表格时 - 它们都被重新创建。所以tableView.indexPathForSelectedRow 在大多数情况下会为此代码返回 nil
  • 你是对的 - 细胞不是自己重新创建的。谢谢。但无论如何tableView.indexPathForSelectedRow 总是返回零。
  • 您是否已经在其他地方调用 deselectRow 了? (就像在 didSelectRow...)
  • 我只在didSelectRow... 中调用deselectRow...。我尝试了这两种情况 - 有和没有这段代码 - 在这两种情况下我都得到了 nil。
  • 您应该只在 viewWillAppear 中调用取消选择。我已经编辑了上面的代码以使用 viewWillAppear 而不是 viewDidAppear(现在将其重新编辑)。
【解决方案2】:

其实这是 UITableViewController 的默认行为。 如果您使用的是 UITableViewController,只需在情节提要中选中此框:

如果您没有使用 UITableViewController,请在您的 viewDidAppear 中(以便用户可以看到它,只需取消选择选定的单元格。

【讨论】:

  • 感谢您的解释。但我没有使用UITableViewController,我希望在不重写每个视图控制器的情况下添加类似的内容
猜你喜欢
  • 2015-07-22
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多