Swift - 如何实现默认视图控制器循环
Posted
技术标签:
【中文标题】Swift - 如何实现默认视图控制器循环【英文标题】:Swift - How to implement a defaultviewcontroller loop 【发布时间】:2017-02-14 01:53:50 【问题描述】:我正在尝试创建 2 个不同的默认视图控制器,然后根据单元格中的内容调用它们并执行其指定的操作。您会在主情节提要中使用 xib 等创建视图控制器吗?
基本上,我有一个要解析的 xml 文件,然后创建表格视图,直到我到达该项目的最后一个(详细信息)页面。据我了解,最好多次使用同一个 tableviewcontroller,而不是为每个级别创建 1 个。我应该创建一个 segue 循环吗?
目前有一些检查可以确保我使用了正确的 segue。
你会从 segue 开始:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let cell = tableView.cellForRow(at: indexPath as IndexPath)
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
segueLocation = hNTUL[(indexPath as NSIndexPath).row].locationLevel
segueTitle = hNTUL[(indexPath as NSIndexPath).row].locationTitle
if segueLocation == "TableView"
performSegue(withIdentifier: "defaultDetailSeague", sender: cell)
let destinationVC = DefaultDetailViewController()
destinationVC.detailTitle = segueTitle
if segueLocation == "DetailView"
performSegue(withIdentifier: "defaultTableSeague", sender: cell)
let destinationVC = DefaultTableViewController()
destinationVC.tableTitle = segueTitle
我也有可能试图以错误的方式解决这个问题。
我也一直在寻找项目示例,但没有找到任何可以引导我走向正确方向的示例。
想法?
【问题讨论】:
感谢您显示更多代码,但我在下面的回答仍然有效。您需要prepare(for:sender:)
的实现,而您没有。请仔细阅读我在回答中所说的话。
你说的是这个吗? override func prepare(for segue: UIStoryboardSegue, sender: Any?) if segue.identifier == "LevelTwo" if let indexPath = self.tableView.indexPathForSelectedRow let controller = segue.destination as! LevelTwoTableViewController let mCaty = mainCat[(indexPath as NSIndexPath).row] controller.selectedName = mCaty.mainCategoriesTitle
是的,就是这样,尽管我认为您对self.tableView.indexPathForSelectedRow
的测试不会像您预期的那样工作(我可能错了)。
您真的应该阅读有关如何使用 segue 传递数据的教程...我不知道您为什么要这样写
您是否尝试动态生成 2 个具有相同 UI 和功能但内容不同的不同表格视图?如果是这样,只需通过 segue 将 bool 值传递给下一个 ViewController 并从适当的数据源构建表。
【参考方案1】:
如果你调用performSegue
,你必须不创建一个destinationVC
; segue 为您创建它。要配置目标视图控制器,实现prepare(for:sender:)
并获取segue 的destination
,将其转换为DefaultDetailViewController。请务必先检查这是否正确!
【讨论】:
我只能评论你展示的代码。如图,是错的,我的回答告诉你原因。以上是关于Swift - 如何实现默认视图控制器循环的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 协议功能,如 Android 接口监听器实现?