【问题标题】:Detail View UITableView - Pass data before segue详细视图 UITableView - 在 segue 之前传递数据
【发布时间】:2014-12-18 03:54:43
【问题描述】:

所以在我的故事板文件中,我有一个从一个 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);
    }

【问题讨论】:

标签: ios uitableview swift segue


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    只需使用 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);
      }
     }
    }
    

    【讨论】:

    • 我也会看看发件人。奇怪的是它是选定的表格单元格(或可能是子视图)。如果是这样,您可以从单元格中获取索引路径,并且不那么麻烦。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我的错误是控制从 tableview 中的单元格而不是从视图控制器本身拖动。当我移动 segue 并从 didSelectRowatIndexPath 手动调用它时,它工作正常

      【讨论】:

        【解决方案5】:

        您应该在didSelectRowAtIndexPath 中调用函数performSegueWithIdentifier。这将首先设置变量,然后调用 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 提供标识符。

        希望这会有所帮助。 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-07
          • 2014-05-23
          • 2012-07-17
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多