gpt4 book ai didi

Swift 3 Segue Q!- 多个 VC 的原型(prototype)单元格 - 使用 didSelectRowAtIndexPath

转载 作者:行者123 更新时间:2023-11-28 08:11:58 26 4
gpt4 key购买 nike

我对 Swift 比较陌生 - 正在为我的医院(我是一名住院医师)开发一个应用程序,它本质上是一个移动引用工具,我正在使用一系列 tableView 构建它。

问题:我无法让我的 Segues 从我的原型(prototype)单元到多个 VC。

  • 我最初的 VC 是一个 tableVC,我使用嵌套数组将原型(prototype)单元分成两部分。 Seen here
  • 目标 VC 也是 TableVC,我希望 initialVC 的每个 tableCell 转至不同的目标 TableVC。
  • 我能够设置一些从我的 initialTVC 到 destinationTVC 的 Segues,我还嵌入了一个导航 Controller --> Here's what my storyboard setup looks like

我想为 Segues 做的事情:

  1. 设置 segue ID,我使用 prepareForSegue 函数在 Storyboard中为每个 segue 提供

  2. 使用 didSelectRowAtIndexPath,使用一些 If 语句指定我想在哪个单元格中执行哪个转场,以执行转场。

  3. 保留 Storyboard Navigation Controller - 喜欢它提供的功能和简单的实现,考虑到我将在进入我的 detailView 页面之前添加更多级别的这些 segues 作为“子菜单”。

这是我的 Swift 3 代码:

//  MainTableViewController.swift

import UIKit

class MainTableViewController: UITableViewController {

var MainTitleArray = [["Children and Pregnant Women", "Mental Health and Addiction", "Hunger and Food Insecurity", "Legal Aid", "Housing, Heat, and Emergency Assistance", "New Immigrants, Refugees, and the Underserved", "The Uninsured and the Underinsured"], ["Primers and the Private Sector", "Federal Programs", "Social Securty"]]
var SubTitleArray = [["Resources for the most vulnerable in the family", "The programs to help those who need it", "When every night is a worry about food on the table", "How to defend yourself in a complicated system", "HEalth follows you into the home", "Your patient needs help - can they sign up worry-free?", "What to do when your options are limited"], ["What you need to know","Medicare Medicaid - What are they?","Disability and Insurance"]]



override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 90
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()

}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {

return MainTitleArray.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return MainTitleArray[section].count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MainCell", for: indexPath) as! MainTableViewCell

cell.MainTitleLabel.text = MainTitleArray[indexPath.section][indexPath.row]

cell.MainSubTitleLabel.text = SubTitleArray[indexPath.section][indexPath.row]

return cell}


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if (indexPath.section == 0) && (indexPath.row == 0) {
self.performSegue(withIdentifier: "CPWSegue", sender: indexPath);
}
else { self.performSegue(withIdentifier: "MHASegue", sender: indexPath)

}}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "CPWSegue" {
let destVC = segue.destination as! CPWTableViewController
destVC.VCName = "CPW"}

}
}

我成功地构建了它,但 segues 仍然无法正常工作。我几乎宁愿仍然有一些错误代码来处理一些事情!如果有人对进一步阅读有任何有用的建议/评论/链接,将非常感激不尽。已经阅读了大量的其他页面和文档,试图让它像我想要的那样简单地工作,但到目前为止还没有成功。提前感谢您提供的任何帮助!

更新于 2017 年 4 月 20 日:我已经编辑了 prepareForSegue 函数,甚至放入了一个“VCName”var,这样我就可以调用 segue.destination(即使“VCName”是 < strong>未 使用)- STILL 没有给我一个 segue(没有错误消息,并且它已成功构建)并且不确定下一步该尝试什么。任何建议表示赞赏!

更新于 2017 年 4 月 26 日:我使用了一些断点,发现 prepare 和 perform segue 函数都没有触发。我重建并确保它是父类(super class)的 override 函数(不知道为什么它不让我事先这样做),并且它起作用了!特别感谢 Sasaang 的帮助!

最佳答案

据我所知,您的代码看起来不错,并且它应该适用于这个小改动。请记住,部分和行是从 0 开始的索引。您有以下内容:

if (indexPath.section == 1) && (indexPath.row == 1) {
self.performSegue(withIdentifier: "CPWSegue", sender: indexPath);
}

我怀疑您正在点击第一部分中的第一项,但没有看到任何过渡,但上面的代码实际上是指第二部分中的第二项。 “联邦计划”单元格。将代码更改为以下内容,以便能够点击“ child 和孕妇”单元格以转到下一个 ViewController。

if (indexPath.section == 0) && (indexPath.row == 0) {
self.performSegue(withIdentifier: "CPWSegue", sender: indexPath);
}

此外,我建议您通过将所有 ViewController StoryBoard Id 添加到与主标题数组类似的数组结构中来保存一些代码,这样可以代替 didSelectRowAtIndexPath 函数中的许多 if-else 语句,您可以将其更改为简单:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegue(withIdentifier: identifierList[indexPath.section][indexPath.row], sender: indexPath);
}

更新

关于更新问题的附加说明。 prepareForSegue 函数只是用来在呈现之前准备下一个场景。例如,如果 CPW viewController 中有一个“名称”字段,您可以在显示它之前像这样在函数中设置它:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "CPWSegue" {
let nextView = segue.destination as? CPWView
nextView.name = "SOME NAME"
}
}

你不要再在那里调用 performSegue(),它已经发生了。

关于Swift 3 Segue Q!- 多个 VC 的原型(prototype)单元格 - 使用 didSelectRowAtIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43501532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com