我想从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]
}
}
答案 0 :(得分:2)
这是我如何解决的:
以下是代码:
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
。之后从数组中获取对象并将其传递给下一个视图控制器。