Segue.destinationViewController设置为sourceViewController的值

时间:2015-04-13 22:39:00

标签: ios swift uistoryboardsegue

我正在学习iOS,因为我编写的应用程序使用UITableViewController和Core Data来显示项目列表,另一个视图控制器也使用Core Data来配置各种其他属性,这些属性未在表格视图。

UITableViewController导航栏中的一个按钮会转到另一个视图,让我可以设置各种细节。这是使用故事板“显示细节”segue完成的,它工作正常。

我想使用UITableViewCell中的附件操作按钮来切换到相同的详细视图控制器,因此我在故事板中创建了另一个“显示详细信息”segue,它将附件详细信息按钮连接到详细视图控制器(即:与导航栏中的按钮相同的segue)

令人困惑的是,当我在运行时单击详细信息附件按钮时,没有任何反应,并且从不调用prepareForSegue。

UITableView单元格样式是Subtitle,我已将其配置为具有Detail附件操作。但是,除非我特意添加,否则不会显示附件按钮:

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: Storyboard.reuseID)
        let tone = toneTable[indexPath.row]
        cell.textLabel!.text = tone.valueForKey("toneName") as? String          
        cell.detailTextLabel!.text = tone.valueForKey("toneDescription") as? String
        cell.accessoryType = UITableViewCellAccessoryType.DetailButton
    return cell

我终于放弃了,并且自己打电话给prepareForSeque:

    override func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) {
        let tone = toneTable[indexPath.row]
        self.performSegueWithIdentifier("ShowToneDetail", sender: tone)
    }

(我使用sender参数作为传递NSManagedOject的方便位置)

现在,prepareForSegue被调用,但如果我在prepareForSegue中放置一个断点,我看到segue.destinationViewController指向源视图控制器,而不是目标视图控制器。这很不幸,因为我想将一些值传递给destinationViewController的新实例。

有趣的是,segue确实正确地实例化了destinationViewController,并将控制传递给它。

但是,我不明白发生了什么。我不知道为什么我必须自己调用prepareForSeque,我不知道为什么没有正确设置segue的destinationViewController。

我做错了什么?

ps:这只是我的看法,还是XCode不像Eclipse这样的其他IDE那么成熟?

1 个答案:

答案 0 :(得分:0)

您以错误的方式创建细胞。您应该使用dequeueReusableCellWithIdentifier:forIndexPath:使用您在故事板中设置的标识符使单元格出列。通过按照您的方式进行操作,您可以直接实例化一个知道"没有关于故事板中添加了详细信息披露按钮或您制作的segue的单元格。

我不知道为什么segue.destinationViewController会指向源视图控制器。我的猜测是它没有,也许你的控制器类混合了。