如何在故事板上创建一个Segue,从编程注册的UICollectionViewCell到新的UIViewController?

时间:2014-06-20 04:26:38

标签: ios objective-c xcode uiviewcontroller xcode-storyboard

我在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文件制作的):

How to make the segue from Cell to the next UIViewController?

我们的目标只是让其他程序员阅读我的代码,使用Storyboard更好地理解应用程序的流程。

是否有可能在故事板上显示和创建一个Segue,从一个以编程方式注册的UICollectionViewCell(在我的例子中在新闻列表视图控制器的UICollectionView内部制作),到一个新的UIViewController(在我的例子中是单一新闻视图),并且实际显示在故事板上的连接?

最终更新:

这是我在遵循用户@rdelmar的建议后最终做的事情。我认为它做得很好:

Dummy segue with yellow notes

2 个答案:

答案 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)以获取与之交互的单元格。