- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Swift 比较陌生 - 正在为我的医院(我是一名住院医师)开发一个应用程序,它本质上是一个移动引用工具,我正在使用一系列 tableView 构建它。
问题:我无法让我的 Segues 从我的原型(prototype)单元到多个 VC。
我想为 Segues 做的事情:
设置 segue ID,我使用 prepareForSegue 函数在 Storyboard中为每个 segue 提供
使用 didSelectRowAtIndexPath,使用一些 If 语句指定我想在哪个单元格中执行哪个转场,以执行转场。
保留 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/
我一整天都遇到同样的错误,我知道这是在说 Storyboard 中没有识别出 segue,但确实如此。以下是我认为相关的代码:1.为 segue 发出信号的按钮的 IBAction。 -(IBActi
我有一个从 A View Controller 到 B View Controller 的 unwind segue。 在B中做了一个网络操作,操作完成后,响应会显示在A View Controlle
我正在创建一个应用程序,家长可以在其中登录并查看有关其本地托儿中心的信息。但是,为登录运行 View Controller 的代码无法正常工作。一旦用户按下登录按钮,我希望我的代码使用标识符“Show
刚刚遇到一个奇怪的问题。我有一个启动画面,它自动使用自定义 segue (fade-to-segue) 转到主页 ViewController。自定义 segue 工作正常,但一旦实现,我在主页上的其
以编程方式创建的 segue 在 performSegueWithIdentifier: 上使应用程序崩溃,不过我真的不想使用 Storyboard。 - (void)viewDidLoad { [s
我想我一定在这里遗漏了一些简单的东西,但我不知道它是什么。 我必须支持来自同一个 View Controller 的多个 segue,所以我很自然地想使用 segue 标识符。我的代码由于某种原因无法
当用户在警告时点击“确定”按钮时,我如何才能将用户带到自定义 View Controller ? 我有一个主 Controller -> 导航 Controller -> 第二个 View Contr
在 TableView Controller 中,我试图获取在我继续之前选择的行的索引(最终将传递此信息以准备继续)。我已经实现了这个功能: var selectedQuestionCell: Ind
我正在 Xamarin Studio 中开发一个应用程序(所以它是 C#),它有一个包含多个 TextField 的表单,我想在 segue 之前验证整个屏幕> 到下一个屏幕执行。单击按钮时,它正在使
我有一个带有标识符的 segue。 当我按下函数 shouldPerformSegueWithIdentifier 中的按钮时,我得到一个空标识符 什么会导致这样的问题?我设置错了什么? 这是我的代码
我有一个奇怪的问题。我在 Storyboard中创建了 2 个 View Controller :testSegueViewcontroller 和 nextPageViewController。 t
我下面的代码试图将一个值从 twoviewcontroller 转移到 View Controller 。 segue 正在工作,我可以从 View Controller 转到 View Contro
我正在尝试使用自定义segue,当单击按钮时,它会使 View 向右或向左“滚动”。我添加了一个如下所示的自定义类 class horizontalSegue : UIStoryboardSegue
我有一个带有 Root View Controller 的 UINavigationController。我的 UINavigationController 也设置为我的应用程序的 Initial V
您好,我正在尝试使用 prepare for segue 方法执行一个 segue。我在关注这个问题 this但我无法成功注册。当我单击注册按钮时,它所做的只是注册用户并停在那里。我从 View Co
当 Storyboard上有一个按钮连接退出时,我了解如何使用展开转场。但是在我的应用程序中,我使用推送转场从 TableViewController 转到 ViewController。所以我的导航
我要实现的目标的背景: MainViewController 呈现 TableVC。我将点击一个单元格以显示 DetailVC。能够通过 TableVC 或 DetailVC 上导航栏上的 doneB
在我的 Storyboard中,模态转场将用户带到登录屏幕(从主屏幕)。然后,我从注册屏幕添加了一个 PUSH segue 到下一个屏幕(创建配置文件),该屏幕嵌入在导航 Controller 中(创
我有大约 6 个 segue 在 prepareForSegue 方法中执行相同的操作,但是,我想为我的 unwind segue 跳过此操作,但我无法弄清楚如何确定传递的 segue 是 unwin
因此,我开始在XCode 4.3.2中使用 Storyboard 。我从Master-Detail应用程序(iPad的拆分 View 应用程序)开始。在详细信息 View (名为DetailVC)中,
我是一名优秀的程序员,十分优秀!