Skip to main content
 首页 » 编程设计

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

2024年01月01日71luoye11

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

我可以使用“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] 
 
    } 
  } 

请您参考如下方法:

我是这样解决的:

  1. 我删除了将集合单元格连接到第二个 View Controller 的 segue
  2. 我在两个 View Controller 之间创建了另一个 segue(称为标识符“userSelectSegue”)
  3. 添加了对 didSelectItemAtIndexPath 的 performSegueWithIdentifier 调用

代码如下:

  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] 
    } 
  }