使用多个 Segue |如何使用 Cell 数据来执行特定的 Segue
Posted
技术标签:
【中文标题】使用多个 Segue |如何使用 Cell 数据来执行特定的 Segue【英文标题】:Working with Multiple Segues | How to use Cell data to perform specific Segues 【发布时间】:2015-07-18 00:55:28 【问题描述】:我在集合视图中显示数据,我知道如何使用 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 的成员
有人有什么想法吗?
【问题讨论】:
这方面有进展吗? @QED 是的,我今天回到这个问题并接受了答案。我确实修改了代码。检查下面 【参考方案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
,您可以用同样的方式调用它。
顺便说一句:关于您的原始问题,请注意以下几点:正如已经指出的那样,您不能为单元格下标。 (UICollectionViewCell
不是Dictionary
,所以cell["key"]
没有意义。)另外,我不喜欢在多个地方将单元格出队 - 相反,您可以致电cellForItemAtIndexPath
或在正如我所建议的那样,首先使用该方法。
【讨论】:
抱歉延迟回复,我找到的正确呼叫是self.performSegueWithIdentifier(self.array[indexPath.row].segue, sender: cell)
in didSelectItemAtIndexPath
。 PS:我不确定我的问题是否有混淆,但我使用数组来显示数据。不管怎样,谢谢你,我已经成功了【参考方案2】:
您正在尝试对 UICollectionViewCell
进行索引,但该类当然不是数组,因此您不能“下标”它。
我的建议是重构您的代码。无论您存储在单元格中的什么数据,您都可以从您的数据模型中获得,因为它最初是从哪里来的。你可能把它放在cellForIndexPath
的单元格中。
如果是这种情况,那么您没有理由不能从您的func ... shouldSelectItemAtIndexPath ... -> Bool
中的同一位置获取相同的数据。我建议在那里做。您的单元格应仅包含正确呈现到屏幕所需的数据。
看看有没有帮助。
【讨论】:
以上是关于使用多个 Segue |如何使用 Cell 数据来执行特定的 Segue的主要内容,如果未能解决你的问题,请参考以下文章
没有情节提要的 TableView Cell 的 iOS Swift Segue
如何从 Table Cell 返回另一个 UIViewController
Swift:选择 UICollectionViewCell(在 UITableViewCell 内)时如何使用 Segue