在UICollectionView中选择单元格时将值传递给另一个ViewController

时间:2015-04-10 19:29:28

标签: ios swift xcode6 uicollectionview segue

我想从UICollectionView中选择一个用户名,并将该字符串传递给另一个视图。

我可以使用" didSelectRowAtIndexPath"来选择单元格。但是,prepareForSegue函数在我的选择设置之前运行,并且segue传递初始值。

我无法弄清楚如何在prepareForSegue中获取索引值。如果是UITableView,我想我可以使用indexPathForSelectedRow。

以下是我所拥有的:

  func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    selectedUsername = userNames[indexPath.row]
    selectedRow = indexPath.row

    println ("Cell \(indexPath.row) selected")
  }

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "userSelectSegue") {

      let nextVC = segue.destinationViewController as ViewController;
      nextVC.passedUsername = userNames[selectedRow]

      println("prepareForSegue")

    }
  }

运行此命令始终会传递userNames [0] 输出窗口打印:

prepareForSegue
Cell 2 selected

编辑1: 我基本上认为我想要下面的tableview代码,但我不能让它适用于UICollectionView(即我无法获取单元格号):

  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "userSelectSegue") {

      let nextVC = segue.destinationViewController as ViewController;           
      let indexPath = UserSelectCollection.indexPathForSelectedRow()
      nextVC.passedUsername = userNames[indexPath.row]

    }
  }

2 个答案:

答案 0 :(得分:2)

这是我如何解决的:

  1. 我删除了将收集单元格连接到第二个视图控制器的segue
  2. 我在两个视图控制器之间创建了另一个segue(称为标识符" userSelectSegue")
  3. 添加了对didSelectItemAtIndexPath的performSegueWithIdentifier调用
  4. 以下是代码:

      var userNames = ["Bob", "Sally", "Mike", "Mary", "James"]
      var selectedRow = 0
    
      func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        selectedRow = indexPath.row
    
        self.performSegueWithIdentifier("userSelectSegue", sender: self)
    
      }
    
      override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if (segue.identifier == "userSelectSegue") {
    
          let nextVC = segue.destinationViewController as ViewController;
          nextVC.passedUsername = userNames[selectedRow]
        }
      }
    

答案 1 :(得分:1)

这是iOS的一般行为。我在这种情况下实现的是。不要覆盖方法didSelectRowAtIndexPath。点击任何单元格,然后在函数prepareForSegue中。您可以在发件人对象中获取单元格。从该单元格中获取所选项目。获取indexPath.item。之后从数组中获取对象并将其传递给下一个视图控制器。