我想从 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]
}
}
请您参考如下方法:
我是这样解决的:
- 我删除了将集合单元格连接到第二个 View Controller 的 segue
- 我在两个 View Controller 之间创建了另一个 segue(称为标识符“userSelectSegue”)
- 添加了对 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]
}
}
