TopicsTableViewController

TopicsTableViewController

我正在尝试通过制作一个代表每个列表项的类来练习使用模型制作列表应用程序。我有一个Category类,其中包含三个属性-两个字符串和一个字符串数组。这是 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类中,我有一种方法可以将值分配给类别,这样我就可以将其排除在视图控制器之外。下面列出了此方法:
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,在其中将他们选择的类别的主题显示在表格视图中。

到目前为止,我已经能够将单元格连接到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()函数的Category数组中返回的数组这一事实使我不知所措。

注意:
我在CategoryTableViewController和TopicsTableViewController之间的选择是在故事板上通过ctrl +从CategoryTableViewController中的单元格拖动到TopicsTableViewController来创建的。

任何帮助将不胜感激!

谢谢 :)

最佳答案

如果不查看完整视图控制器,很难回答。通过查看您发布的代码,似乎所选单元格与“准备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]
    }
}

10-08 20:22