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

时间:2017-12-10 05:38:11

标签: swift uitableview

我想要完成什么?

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

问题是什么?

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

我建议的解决方案

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

我的问题

  1. 我似乎无法“识别”sender来自 prepare(for segue: UIStoryboardSegue, sender: Any?)内的,这意味着我不知道我将如何判断该函数是从trailingSwipeActionsConfigurationForRowAt而不是didSelectRowAt函数调用的。
  2. 我不确定如何阻止每次prepare(for segue: UIStoryboardSegue, sender: Any?)事件对didSelectRowAt的调用。

1 个答案:

答案 0 :(得分:1)

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

解决方案是通过从黄色VC图标拖动到目标VC来创建从VC到VC的segue并为其提供标识符:

enter image description here

然后通过调用<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0"/> <title>HTML BolierPlate</title> <link rel="stylesheet" type="text/css" href="css/reset.css"></link> <link rel="stylesheet" type="text/css" href="css/mystyle.css"></link> <style> .item{ background: green; margin: 30px; height: 400px; width: 400px; color: black; font-weight: black; } </style> </head> <body> Welcome to BoilerPlate!!! <div class="item-1 item"> Items #1 </div> <div class="item-2 item"> Items #2 </div> <div class="item-3 item"> Items #3 </div> <div class="item-4 item"> Items #4 </div> <div class="item-5 item"> Items #5 </div> <div class="item-6 item"> Items #6 </div> <div class="item-7 item"> Items #7 </div> <div class="item-8 item"> Items #8 </div> <script src="js/lib/jquery.min.js" ></script> <script src="js/myscript.js" ></script> </body> </html>手动执行segue,您可以在其中明确地将PerformSegue(withIdentifier: sender:)设置为您在目的地中识别它所需的任何内容。