详细信息视图UITableView - 在segue之前传递数据

时间:2014-12-18 03:54:43

标签: ios uitableview swift segue

所以在我的storyboard文件中,我有一个来自一个UITableViewController的segue到另一个,所以当用户点击单元格时,它会打开下一个表格。没什么特别的。但是当他们点击单元格时,我需要指定加载到下一个视图中的数据。我在didSelectRowAtIndexPath中执行此操作。根据indexPath.row,我设置了分配给prepareForSegue函数中的详细表视图的变量的值。我将视图控制器作为let detailViewController = segue.destinationViewController as DetailTableViewController中的变量加载。从这里开始使用赋值函数设置数据。但是,当我点击表格时,数据不会显示,直到我按下并再次点击它。基本上,在 segue之后分配了数据...如何分配数据并在之后执行segue?

修改

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        switch indexPath.row {
        case 0:
            self.passedInfo = self.infoOne;
            break
        case 1:
            self.passedInfo = self.infoTwo;
            break
        case 2:
            self.passedInfo = self.infoThree;
            break
        default:
            break;
        }
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        let detailViewController = segue.destinationViewController as DetailTableViewController
        let destinationTitle = "Detail View"
        detailViewController.title = destinationTitle
        self.passedScores.sort{$0 > $1};
        detailViewController.setData(self.passedInfo);
    }

5 个答案:

答案 0 :(得分:2)

在显示控制器之前,您应该使用prepareForSegue函数将数据传递到目标视图控制器。这是一篇关于如何在Swift中执行此操作的精彩文章:http://www.raywenderlich.com/forums/viewtopic.php?f=11&t=18471

答案 1 :(得分:1)

只需使用prepareForSegue执行此任务

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
 // Get the new view controller using segue.destinationViewController.
 // Pass the selected object to the new view controller.

 if segue.identifier == "mysegue" {
  let vc = segue.destinationViewController as? DetailTableViewController
  if let indexPath = self.tableView.indexPathForSelectedRow {
    switch indexPath.row {
        case 0:
            self.passedInfo = self.infoOne;
            break
        case 1:
            self.passedInfo = self.infoTwo;
            break
        case 2:
            self.passedInfo = self.infoThree;
                break
        default:
            break;
    }
    vc.setData(self.passedInfo);
  }
 }
}

答案 2 :(得分:0)

不是分配给didSelectRowatIndexPath中的变量,而是检查prepareForSegue方法中的选定行。

答案 3 :(得分:0)

我的错误是控制从tableview中的单元格而不是从视图控制器本身拖动。当我移动segue并从didSelectRowatIndexPath

手动调用它时,它工作正常

答案 4 :(得分:0)

您应该在performSegueWithIdentifier中调用didSelectRowAtIndexPath函数。这将首先设置变量,然后调用segue。方法如下:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    switch indexPath.row {
    case 0:
        self.passedInfo = self.infoOne;
        break
    case 1:
        self.passedInfo = self.infoTwo;
        break
    case 2:
        self.passedInfo = self.infoThree;
        break
    default:
        break;
    }

   self.performSegueWithIdentifier("ShowInfo", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier = "ShowInfo" {
    let detailViewController = segue.destinationViewController as DetailTableViewController
    let destinationTitle = "Detail View"
    detailViewController.title = destinationTitle
    self.passedScores.sort{$0 > $1};
    detailViewController.setData(self.passedInfo);
    }
}

确保在故事板中为segue提供标识符。

希望这会有所帮助。 :)