gpt4 book ai didi

ios - 我如何从 tableviewcell 继续并将不同的数据从每个单元格传递到下一个 tableview?

转载 作者:可可西里 更新时间:2023-11-01 00:58:27 25 4
gpt4 key购买 nike

我正在尝试通过创建一个类来表示每个列表项来练习使用模型制作列表应用程序。我有一个类别类,它包含三个属性——两个字符串和一个字符串数组。这是类(class):

class Category {

var name: String
var emoji: String
var topics: [String]
// (the getCategories method listed below goes here) //

init(name: String, emoji: String, topics: [String]) {
self.name = name
self.emoji = emoji
self.topics = topics
}

在我的 Category 类中,我有一个方法可以为类别赋值,这样我就可以将它们排除在 View Controller 之外。下面列出了该方法:

class func getCategories() -> [Category]
{
let categories =
[Category(name:"cat", emoji:"😸", topics:["paws","tails", "fur", "pussyfoot","purr", "kitten", "meow"]),
Category(name: "car", emoji: "🚗", topics: ["motor", "speed", "shift", "wheel", "tire"])
]
return categories
}

我有两个 UITableViewControllers - CategoryTableViewController 和 TopicsTableViewController;我希望用户能够点击 CategoryTableViewController 中的类别单元格,然后被带到 TopicsTableViewController,其中他们选择的类别的主题显示在 tableview 中。

到目前为止,我能够让单元格转到 TopicsTableViewController,但无论我选择哪个类别,它都显示相同的主题。这是我在 CategoriesTableViewController 中设置 didSelectRowAtIndexPath 和 prepareForSegue 的方式...

override func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath)  {
let indexPath = tableView.indexPathForSelectedRow
let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "fromCategorySegue") {
let vc = segue.destinationViewController as! TopicsTableViewController
vc.categories = categories
}
}

即使我选择第二个类别(汽车),它也会在 TopicsTableViewController 上显示第一个类别(猫)主题。

如果有帮助,这里是我在 TopicsTableViewController 中的一些代码片段...

override func tableView(tableView: UITableView, cellForRowAtIndexPath       indexPath: NSIndexPath) -> UITableViewCell {    
let topic = categories[indexPath.section].topics[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier("topicCell",forIndexPath: indexPath)
cell.textLabel?.text = topic

return cell
}

我还在 TopicsTableViewController 的顶部定义了类别,因此我可以根据主题计数获得正确的行数...

var categories = Category.getCategories() 

我想我在 didSelectRowAtIndexPath 或 prepareForSegue 中遗漏了一些东西。我认为我的主题是一个从 getCategories() 函数在类别数组中返回的数组这一事实不知何故搞砸了我。

注意:我在 CategoryTableViewController 和 TopicsTableViewController 之间的 segue 是通过 ctrl + 从 CategoryTableViewController 中的单元格拖动到 TopicsTableViewController 在 Storyboard上创建的。

非常感谢任何帮助!

谢谢 :)

最佳答案

如果没有看到完整的 View Controller ,这个问题很难回答。从查看您发布的代码看来,所选单元格与 prepare for segue 方法之间没有任何关系。例如,您实际上是否使用了在 didSelectCell 方法中创建的变量?看起来你没有。在为 segue 做准备时,您只需一遍又一遍地展示相同的东西,所以说实话,结果非常明显。

您需要存储所选单元格的索引。然后使用该索引显示数组中的相应数据。像下面这样的东西可能会起作用。需要在类级别创建一个名为 indexForCatergoryToShow 的变量。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
{
self.indexForCatergoryToShow = indexPath.row
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if (segue.identifier == "fromCategorySegue")
{
let vc = segue.destinationViewController as! TopicsTableViewController
vc.categories = categories[indexForCatergoryToShow]
}
}

关于ios - 我如何从 tableviewcell 继续并将不同的数据从每个单元格传递到下一个 tableview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39471550/

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