我想从我的collectionview单元格创建一个segue到另一个viewcontroller的另一个collectionview单元格。例如,当点击第一个单元格时,我想从另一个viewcontroller转到另一个collectionview的第一个单元格。或者当点击第二个小区时,我想去第二个小区。我怎样才能做到这一点?
答案 0 :(得分:0)
您不能直接从一个视图控制器中的集合视图单元格中获取segue转到另一个视图控制器中的另一个单元格。但是,通过执行类似以下的操作,应该可以实现您想要的目标:
父ViewController
1)添加NSIndexPath类型的selectedIndexPath属性
2)在Storyboard(或代码中)中设置此视图控制器实现UICollectionViewDelegate
3)为Collection View
实现didSelectItemAtIndexPath委托方法- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
selectedIndexPath = indexPath
[self performSegueWithIdentifier:@"identifier" sender:self];
}
4)将selectedIndexPath值传递给第二个视图控制器
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// :: Should do other checking - if we have segues to other screens
SecondViewController *secondViewController = (SecondViewController *)segue.destinationViewController;
secondViewController.initialDisplayedCellIndexPath = selectedIndexPath
}
}
SecondViewController代码
1)添加NSIndexPath类型的属性initialDisplayCellIndexPath
2)覆盖viewWillAppear
(假设您的collectionView属性名为collectionView)
[self.view layoutIfNeeded];
[self.collectionView scrollToItemAtIndexPath:initialDisplayCellIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically
基本上上面做的是从一个视图控制器到第二个视图控制器执行正常的segue - 由于单击一个单元格而在代码中触发。作为prepareForSegue的一部分,我们可以将数据传递给第二个视图控制器(在本例中是所选项的indexPath)。然后,当显示第二个viewcontroller时,我们告诉集合视图滚动到我们想去的地方。
希望有道理:-)