【问题标题】:swift passing data from a tableview cell to view controller将数据从表格视图单元快速传递到视图控制器
【发布时间】:2015-11-02 16:06:21
【问题描述】:

我正在尝试将一些数据传递给单独的视图控制器,视图控制器连接到导航控制器,我可以使用

访问此视图控制器

parentNavigationController!.performSegueWithIdentifier("ExercisePage", sender: self)

但数据没有传递,这是我的代码吗?

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

    let cell2 = tableView.cellForRowAtIndexPath(indexPath) as! SelectionProperties


    let desVc = uploadDetails1()
desVc.workoutName = cell2.nameLabel!
         desVc.parentNavigationController!.performSegueWithIdentifier("ExercisePage", sender: self)
 }

它说它在打开一个可选项时发现 nil。

desVc.performSegueWithIdentifier("ExercisePage", sender: self) }

如果我这样做,它说没有segue

【问题讨论】:

  • 你需要确保视图控制器和你的视图控制器有一个segue,在你的故事板中有表格视图。

标签: swift uitableview segue


【解决方案1】:

试试这个:(你不必使用所有的 if 语句......)

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

    performSegueWithIdentifier("ExercisePage", sender: indexPath)


    }


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

            if segue.identifier == "ExercisePage"
            {
                guard let indexPath = sender as? NSIndexPath else {
                return } 

                    guard let destinationViewController = segue.destinationViewController as? uploadDetails1 else { 
                        return } 
                        guard let cell = tableView.cellForRowAtIndexPath(indexPath) else { 
                         return } 

                       guard let _ = cell.nameLabel else { 
                          return } 

                            destinationViewController.workoutName = cell.nameLabel!
          }
        }

【讨论】:

  • 你应该使用 Swift 2.0 附带的 guard 语句而不是嵌套的 let 语句
  • 啊,是的,你是对的,谢谢。我改变了答案。谢谢!
  • 问题是这里没有调用prepareforSegue,因为segue是从导航控制器链接到我想要传递细节的视图控制器,从当前视图控制器那里没有segue, tableview 本身是以编程方式创建的,这就是为什么我需要 parentNavigationController!.performSegueWithIdentifier("ExercisePage", sender: self) 来获得正确的页面......非常令人困惑,也许我应该只使用结构来传递数据,这真的很容易方式嗯
  • 我认为以编程方式构建 tableView 并不重要。您可以直接链接两个视图控制器。 (也许我没听懂……)
猜你喜欢
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多