我知道如何使用 prepareForSegue函数中的segues传递数据,但是我有一个TableViewCell,从那里有两个可能的segues到两个不同的ViewControllers(现在让我们说A,B)。在这里建议最好将segues连接到View控制器,而不是将tableCell本身连接,事实如此,效果很好。但是我想在单击单元格时将信息传递给第二个View控制器,因此如何访问我连接到SourceViewController的 segue 。
码:
内部prepareForSegue
if segue.identifier == "showQuestionnaire"{
if let indexPath = self.tableView.indexPathForSelectedRow() {
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! QuestionnaireController
let patientQuestionnaire = patientQuestionnaires[indexPath.row] as! PatientQuestionnaire
controller.selectedQuestionnaire = patientQuestionnaire
self.performSegueWithIdentifier("showQuestionnaire", sender: self)
}
}
再次:这个问题不是关于通过 prepareForSegue* 传递信息 *
您应该使用该didSelectRowAtIndexPath
方法来确定是否选择了一个单元格。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.performSegueWithIdentifier("showQuestionnaire", sender: indexPath);
}
然后用你的prepareForSegue
方法
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "showQuestionnaire") {
let controller = (segue.destinationViewController as! UINavigationController).topViewController as! QuestionnaireController
let row = (sender as! NSIndexPath).row; //we know that sender is an NSIndexPath here.
let patientQuestionnaire = patientQuestionnaires[row] as! PatientQuestionnaire
controller.selectedQuestionnaire = patientQuestionnaire
}
}
解释…
performSegueWithIdentifier
“准备segue”方法中,因为它performSegueWithIdentifier
会导致prepareForSegue
;您只是在无目的地循环。(当您要执行segue时,始终执行prepareForSegue)prepareForSegue
选择行时,它不会自行运行。这是您需要的地方didSelectRowAtIndexPath
。您需要performSegueWithIdentifier
前面所述方法的外部,应该在didSelectRowAtIndexPath
问题内容: 我正面临错误消息: 这是导致错误的代码 在Obj-C上可以这样使用: 我究竟做错了什么? 问题答案: 这似乎是由于子类模板中的问题。它带有该方法的一种版本,需要您解开序列。 将当前功能替换为: 这个版本隐式地解开了参数,所以应该没问题。
问题内容: 我是新手,尝试快速创建UIColor类的扩展为 之后,我以以下方式访问该方法 我不知道该声明应作为参数传递给我。 问题答案: 您已经定义了一个 实例方法 ,这意味着您只能在一个实例上调用它: 发生编译器错误“缺少参数”是因为 实例方法是Swift中的Curried Function ,因此可以等效地称为 (但这是一件奇怪的事情,我添加它只是为了解释错误消息的来源。) 但是,您真正想要的
问题内容: C和派生函数的入口点函数具有和(和)参数,但是Swift没有合适的参数:顶级代码只是代码,并且没有参数。 在Swift程序中,如何访问等价的? 问题答案: 进程 刚刚重命名为 CommandLine (自Swift 3.0 8月4日快照以来) (由于某些原因,变更日志中未提及)
问题内容: 谁能看到世界上为什么不会调用didSelectRowAtIndexPath?我已经在代码和情节提要中对它进行了三重检查。 问题答案: Swift 3修改了方法的签名(很多方法,新的“规则” /样式) 替换 为 请注意,vs ,与您更新的其他对象(也采用了相同的“样式”)一样,但不是。 删除该行,然后让XCode进行自动补全。否则,您可以将其替换为文档中的那个。
问题内容: 我有两个视图控制器,一个和两个。我从VC一到VC二。在VC 2上,我选择一些存储在数组中的数据。当我按下导航栏上的“返回”按钮时,我想将该阵列发送回VC One。 使用Swift和Storyboards做到这一点的最佳方法是什么? 谢谢! 问题答案: 如果要使用“完成”和“取消”按钮(有点像选择器)来显示模式视图,则在展开segue方法期间获取值可能是最简单的。 假定您要使用导航控制器
问题内容: 在上面的代码中,我有2个问题:1)。它具有编译错误:’UINavigationController!’ 没有名为“ pushViewController”的成员 但是在该类中,确实有一个pushViewController方法。 2)。我必须添加注释:@objc(SEPushNoAnimationSegue),否则,在情节提要中,它只能识别随机生成的名称,例如_tcxxxxSEPush