使用多个分段|如何使用Cell数据执行特定的Segues

时间:2015-07-18 00:55:28

标签: ios swift core-data uicollectionview segue

我在集合视图中显示数据,我知道如何使用prepareForSegue函数传递数据,但我正在尝试让应用根据单元属性数据确定要使用哪个segue。 (每个segue转到不同的视图控制器以显示相关信息。)

例如

如果cell.type等于"1",则执行segueOne如果类型为"2",则执行segueTwo

我试图做这样的事情;

 func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool {

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CollectionViewCell

    if cell[indexPath].type = "1" {
        performSegueWithIdentifier("showPage1", sender: self)
    } else if self.cell[indexPath].type = "2" {
        performSegueWithIdentifier("showPage2", sender: self)
    } else { println("error when selecting cell to segue") }

}

然而,我得到了一个错误;

  

' CollectionViewCell'没有名为Subscript的成员

有人有任何想法吗?

2 个答案:

答案 0 :(得分:1)

假设您的集合视图中的项目可以重新安排(或者可能在将来的某个时间),indexPath将不足以向您提供选择了哪个单元格的信息。因此,IMO你想给细胞一个属性的想法是可行的。

最简单的“快速和脏”方法是简单地将segue标识符字符串硬编码到您的单元格中。这不是最好的设计,因为您在应该知道彼此的应用程序元素之间引入依赖关系。

class MyCell : UICollectionViewCell {
    var segue = "DefaultSegue"
}

现在在didSelectItemAtIndexPath ...

中调用适当的segue非常简单
self.performSegueWithIdentifier(cell.segue, sender:cell)

当然最好使用enum。更安全,更易读,更易于维护。

enum Segue : String {
   case ToInfo  = "SegueToInfo"
   case ToLogin = "SegueToLogin"
   // etc.
}

MyCell的ivar现在为var : Segue = SomeDefaultValue,你可以用同样的方式调用它。

BTW:关于你原来的问题,请注意以下几点:正如已经指出的那样,你不能下标一个单元格。 (UICollectionViewCell不是Dictionary,因此cell["key"]没有意义。)另外,我不是在不止一个地方将单元格出列的粉丝 - 而是可以调用{{ 1}}或者首先在该方法中完成工作,正如我所建议的那样。

答案 1 :(得分:0)

您正在尝试索引UICollectionViewCell,但当然该类不是数组,因此您无法“下标”它。

我的建议是重构你的代码。无论您在单元格中存储的数据是什么,您都可以从数据模型中获取数据,因为这是它最初的来源。你可能正在cellForIndexPath中将它放在你的单元格中。

如果是这种情况,那么您无法从func ... shouldSelectItemAtIndexPath ... -> Bool中的同一位置获取相同的数据。我建议在那里做。您的单元格应该只包含正确渲染到屏幕所需的数据。

看看是否有帮助。