带有详细信息的 UITableView 清单(防止 Segue?)

Posted

技术标签:

【中文标题】带有详细信息的 UITableView 清单(防止 Segue?)【英文标题】:UITableView Checklist with Details (Prevent Segue?) 【发布时间】:2017-12-10 05:38:11 【问题描述】:

我想要完成什么?

我想要一个显示项目的 UITableView。用户应该能够单击该项目以指示该项目是否已完成。我还想让用户能够使用有关列表中项目的更多详细信息来切换到不同的 ViewController。

有什么问题?

在 UITableView 中显示项目并允许用户单击以将附件更改为复选标记非常简单。 (*** 上有数百个问题和答案,还有数十个在线教程。)我的问题是,一旦我添加了prepare(for segue: UIStoryboardSegue, sender: Any?) 函数,单击列表项会在调用tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 后立即执行 segue,而我没有不想这样。

我提出的解决方案

我想使用新的 iOS 11 trailingSwipeActionsConfigurationForRowAt 功能允许用户滑动表格单元格以获取有关该项目的更多详细信息。我让这个滑动工作没有问题——我已经成功地使用它在其他 ViewController 中执行其他操作(例如删除、共享),所以我确信这一定是可能的。

我的问题

    我似乎无法“识别”sender 来自内部 prepare(for segue: UIStoryboardSegue, sender: Any?),这意味着我不确定如何判断该函数是否正在运行从 trailingSwipeActionsConfigurationForRowAt 而不是 didSelectRowAt 函数调用。 我不确定如何防止在每个 didSelectRowAt 事件中调用 prepare(for segue: UIStoryboardSegue, sender: Any?)

【问题讨论】:

【参考方案1】:

我假设您已将 segue 直接从 tableview 单元格拖动到目标 VC,以便在您点击单元格时立即执行。

一种解决方案是创建从 VC 到 VC 的转场,方法是从黄色 VC 图标按住 ctrl 拖动到目标 VC 并给它一个标识符:

然后通过调用PerformSegue(withIdentifier: sender:) 手动执行segue,您可以在其中将sender明确设置为您需要在目标中识别它的任何内容。

【讨论】:

谢谢,@zisoft!这解决了第二个问题。我能够通过使prepare 函数中的sender 等于trailingSwipeActionsConfigurationForRowAt 中的indexPath 来解决第一个问题。 (我只需要将prepare 函数更改为if let indexPath = sender as? IndexPath

以上是关于带有详细信息的 UITableView 清单(防止 Segue?)的主要内容,如果未能解决你的问题,请参考以下文章

带有“单元格”的水平 UIScrollView?

UITabBarcontroller、UITableView 和 pushView

带有 didselectrowAt 索引的 UiTableview 排序返回先前的选择?

带有输入字段的 UITableView - 如何在进入详细视图并返回时保留值

添加/删除 UITableView 行时如何防止文本字段变空?

UIScrollview有一个大视图,还是带有多个视图的UITableview?