【问题标题】:Send selected cell index of CollectionView to viewController by segue通过 segue 将 CollectionView 的选定单元格索引发送到 viewController
【发布时间】:2015-07-06 07:50:59
【问题描述】:

我有一个 CollectionView。我想通过 segue 将选定的单元格索引发送到 ViewController。为此我做了:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    println("Cell \(indexPath.row) selected!")

    self.performSegueWithIdentifier("categoryItems", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "menuItems"{
        var menuController = segue.destinationViewController as! MenuViewController
        if let indexPath = collectionView.indexPathForCell(sender as! UICollectionViewCell) {
            menuController.selectedCell = "\(indexPath.row)"
        }
    }
}

但它不发送任何东西。问题是什么?我只想在 ViewController 中打印出来,其中:

var selectedCell : String?

myLabel.text = selectedCell

我做错了什么?

【问题讨论】:

  • 您为 performSegueWithIdentifier 传递的发件人是 View controller not selected Cell。另一种方法是创建变量来保存选定的单元格索引。传递该值后将其设置为零。或者使用方法 indexPathsForSelectedItems 来获取选定的索引。

标签: ios swift uicollectionview segue


【解决方案1】:

您有一张带有标识符的支票

if segue.identifier == "menuItems"

并且您正在使用此标识符执行 segue:

self.performSegueWithIdentifier("categoryItems", sender: self)

menuItems 不能神奇地变成categoryItems,你必须自己做点什么:)

【讨论】:

  • 哦,该死的!但它会在下一行if let indexPath = collectionView.indexPathForCell(sender as! UICollectionViewCell) { 中打印下一个错误Could not cast value of type 'CategoryViewController' to 'UICollectionViewCell'
  • 那是因为,您在调用 segue 时将self 发送为sender,即self.performSegueWithIdentifier("categoryItems", sender: self),您可以传递indexPath。并在那里获取 indexPath 。但这不是一个好主意。保存 indexPath 类级别是个好主意,或者从您的集合视图中获取选定的 indexPath。
  • 那你有什么建议?我该怎么做?你能帮我吗?我知道如何为 tableView 做,但不是为 collectionView
  • 当您点击任何项目时,获取indexPath 并将其保存到类级变量,然后执行segue。在prepareForSegue 中,您可以引用类级变量以传递给下一个视图控制器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多