我在Xcode 5.1.1中使用了Storyboard,我在那里有一个UICollectionView。但是,那里的单元格实际上使用了一个XIB(因此,没有显示在Storyboard上),然后以编程方式注册到UICollectionView,如下所示:
UINib *nibHero = [UINib nibWithNibName:@"MTNNewsListHeroCell"
bundle:[NSBundle mainBundle]];
[self.newsListCollectionView registerNib:nibHero
forCellWithReuseIdentifier:@"heroCellID"];
到目前为止,这么好。一切都很好。
接下来,我想从这个UICollectionViewCell创建一个segue到故事板上的另一个UIViewController 。这是一个非常标准的"点击一个项目,打开详细视图"特征
通常,如果Cell存在于故事板上,在UICollectionView内部,我可以在Storyboard上绘制一条线,从它到下一个UIViewController来创建Segue。但是,故事板上不存在Cell(同样,因为单元格是作为XIB文件制作的):
我们的目标只是让其他程序员阅读我的代码,使用Storyboard更好地理解应用程序的流程。
是否有可能在故事板上显示和创建一个Segue,从一个以编程方式注册的UICollectionViewCell(在我的例子中在新闻列表视图控制器的UICollectionView内部制作),到一个新的UIViewController(在我的例子中是单一新闻视图),并且实际显示在故事板上的连接?
最终更新:
这是我在遵循用户@rdelmar的建议后最终做的事情。我认为它做得很好:
答案 0 :(得分:3)
不,你不能这样做。 segue基本上是从一个视图控制器到下一个视图控制器的过渡的直观表示。您需要在故事板上以视觉方式表示该segue的两端才能制作一个。您可以在集合视图中添加一个单元格并将segue连接到它只是为了显示故事板中的流程,但是它永远不会被调用,因为您在集合视图中实际拥有的单元格将是从xib文件创建的(I& #39;我不确定这会让看到你代码的人更清楚)。如果你真的想要一个实际的功能segue,那么在故事板中创建单元格。
答案 1 :(得分:0)
如果以后有人需要,可以采取解决方法。
在collectionview或collectionviewcontroller中:
private var onSelectionChangeListener:(()->Void)? = nil;
override func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool {
if onSelectionChangeListener != nil {
onSelectionChangeListener!();
}
return true;
}
func setSelectionChangeListener(listenerMethod:(()->Void)) {
onSelectionChangeListener = listenerMethod;
}
这样您的集合视图就可以理解已有选择。你可以从这里继续前进。在自定义listenerMethod中,您可以调用segue而不是单元格内部。
您可能需要更改方法签名(而不是()-Void)以获取与之交互的单元格。