gpt4 book ai didi

swift - 使用prepareForSegue将特定数据传递到另一个Viewcontrol

转载 作者:行者123 更新时间:2023-11-30 10:04:59 25 4
gpt4 key购买 nike

我正在尝试制作 Vocab 应用程序。第一个ViewController是一个静态的tableView,用户可以选择要记住的单词的日期。所有day_vocabulary数组都在这个ViewController中,一个数组包含30个词汇,我有90天的词汇。

当用户选择日期时,此 ViewCotroller 会将一个数组传递到另一个将显示 30 个词汇表的 View 。在这里,我尝试使用 90 个 Segues 将特定数据传递到另一个 ViewControl,它看起来一点也不好。我也尝试像这样使用 didSelectRowAtIndexPath

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

if indexPath.section == 0 && indexPath.row == 0 {
performSegueWithIdentifier("dayVocab1", sender: nil )

}

}

通过阅读另一篇文章,我意识到如果不使用 Storyboard就无法设置segue的标识符,所以结果是相同的。

我想知道仅使用一个segue传递特定数据。

这是我的另一个prepareFor segue代码。

覆盖函数prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if (segue.identifier == "dayVocab1") {

let destViewController : ViewController = segue.destinationViewController as! ViewController
destViewController.vocabData = vocab_day1p1
destViewController.meaningData = meaning_day1p1

}

if (segue.identifier == "dayVocab2") {

let destViewController : ViewController = segue.destinationViewController as! ViewController
destViewController.vocabData = vocab_day1p2
destViewController.meaningData = meaning_day1p2

}

}

我认为使用发送者是解决方案的关键,

请让我知道最好的解决方案是什么。

谢谢。

最佳答案

我同意你的观点,90 个 segues 有点难以维持。从您的代码中,我可以放心地假设您正在使用相同的 ViewController 来显示特定日期的词汇,对吗?因此,您实际上并不需要 90 个 Segues 将您路由到相同的 ViewController。您只需要传递给它不同的数据,这样它就会显示当天的不同词汇。这是我要做的:

使用标识符“dayVocab”创建一个从 tableView 到新 ViewController 的 Segue

在您的 didSelectRowAtIndexPath 中,代码如下所示:

  if  indexPath.section == 0  && indexPath.row == 0 {
performSegueWithIdentifier("dayVocab", sender: "dayVocab1")
}

然后在 prepareForSegue:segue:sender 方法中,这样做:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
if(segue.identifier == "dayVocab"){
// do somechecking on the sender's type to make sure it is unwrapped properly
if let day = sender as! String {

if(day == "dayVocab1"){
let destViewController : ViewController = segue.destinationViewController as! ViewController
destViewController.vocabData = vocab_day1p1
destViewController.meaningData = meaning_day1p1
}else if(day == "dayVocab2"){
let destViewController : ViewController = segue.destinationViewController as! ViewController
destViewController.vocabData = vocab_day1p2
destViewController.meaningData = meaning_day1p2
}

}
}
}

当然,此代码尚未经过测试,请随意修改以适应可维护性的需要。

关于swift - 使用prepareForSegue将特定数据传递到另一个Viewcontrol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36491957/

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