如何通过Segue

时间:2017-02-18 06:56:36

标签: ios swift xcode uicollectionview segue

我正在尝试将包含在集合视图单元格中的标签发送到另一个带有segue的视图控制器。

我的计划是当用户点击集合视图单元格时,应用程序会转到下一个视图控制器,其中导航栏的标题显示所选集合视图单元格中标签的文本。

我试过这个:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CCCollectionViewCell

    //itemSelected = items[indexPath.row] as String

    itemSelected = cell.pLabel.text!

    print(itemSelected)
}

并且在prepareForSegue中我没有编写任何代码,因为我不确定它是如何工作的。

我将块'..items [indexPath.row]注释掉为String',因为它不显示标签并添加了print函数以查看输出内容,但它只输出storyboard中给出的名称。 / p>

我是Xcode的新手,所以我不熟悉didSelect和prepareForSegue。我要做的就是将集合视图单元格中的文本发送到另一个带有segue的视图控制器。

3 个答案:

答案 0 :(得分:5)

  func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        self.performSegue(withIdentifier: "contentVideoSegue", sender: indexPath)

}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "contentVideoSegue"{
        let selectedIndexPath = sender as? NSIndexPath
        let videoContentVC = segue.destination as! VideoContentController
        videoContentVC.text = items[selectedIndexPath.row] as String
    }
}

希望能帮助:)

答案 1 :(得分:3)

从你的代码中你没有调用performSegue(withIdentifier:sender:)所以你可能已经从CollectionViewCell创建了segue到DestinationViewController。因此,在prepareForSegue方法中使用此单元格获取indexPath。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

     if let cell = sender as? UICollectionViewCell, 
        let indexPath = self.collectionView.indexPath(for: cell) {

         let vc = segue.destination as! SecondViewController //Cast with your DestinationController
         //Now simply set the title property of vc
         vc.title = items[indexPath.row] as String
     }
}

答案 2 :(得分:0)

因此您不需要在didSelect中设置单元格,因为您已经在cellForItemAtIndexPath中进行了此操作。

而是您想要在didSelectItemAtIndexPath中调用performSegue(withIdentifier: "SegueName", sender: indexPath)。然后在你的prepareForSegue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    guard let indexPath = sender as? IndexPath else { return }

    let collectionCell = collectionView.cellForItem(at: indexPath)
    let textToPass = collectionCell.textLabel.text

    let detailVC = segue.destination as? DetailViewController
    detailVC.passedInString = textToPass
}