0

我有一个包含集合视图的视图。我以编程方式(在 viewDidLoad 中)添加了这个集合视图——所以它不在情节提要上。此集合视图包含多个单元格。当用户单击集合视图中的一个单元格时,我想切换到另一个视图控制器(我计划在情节提要上添加)。我的问题是 - 由于集合视图不在情节提要上,我该如何摆脱它?或者有没有其他方法可以做到这一点。

对上述原始问题的一些更新:

在父视图控制器中,我执行以下操作:

//Layout for the collection view
CDLayout *cdLayout = [[CDLayout alloc] initWithItemSize:CGSizeMake(cardWidth, cardHeight) withItemInsets:UIEdgeInsetsMake(topInset, leftInset, bottomInset, rightInset) withInterItemSpacingX:8.0f withTopMargin:margin withLeftMargin:margin withBottomMargin:margin withRightMargin:margin shouldRotate:NO];

//This is the collection view controller
CDLineLayoutViewController *cdLineVC = [[CDLineLayoutViewController alloc] initWithCollectionViewLayout:cdLayout withItemCount:12 ];

// add the collection view controller to self - the parent    
[self addChildViewController:cdLineVC];

[cdLineVC didMoveToParentViewController:self];

// add collectionView as a subview
[self.view addSubview:cdLineVC.collectionView];

collectionView 有 12 张卡片。当用户单击其中一张卡片时,我想移动到另一个视图控制器。

如您所见,集合视图不在情节提要上。那么,有没有办法创建一个segue?

顺便说一句,一种选择是 Taseen 在下面建议的。我试过了,它正在工作。但据我了解,这实际上并不是“转场”。

4

2 回答 2

2

你能告诉我们你写的任何代码吗

我从您的问题中了解到,您在viewDidLoad 中添加了集合视图。而且我相信您已将集合视图的委托设置为 self,因此在 didSelectItemAtIndexPath方法中您可以编写此代码

 -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    //From indexpath.item, you know which cell was clicked

    //using switch method

    switch (indexPath.item) {
        case 0:
            //You Can push the view controller from here
            //You need to import the header file of that View controller
           DestinationViewController *destinationView;

            //if the self controller in which the collection view is shown is embedded in Navigation controller,
            //you can push using
            [self.navigationController pushViewController:destinationView animated:YES];

            //if it is not embedded, use modal segue
            [self.modalViewController presentModalViewController:destinationView animated:YES];


            break;

        default:
            break;
    }
}

编辑:您将在情节提要上从ParentViewControllerDestinationController创建的 segue将具有 segueIdentifier 属性。如下所示, 在此处输入图像描述 然后在didSelectItemAtIndexPath中而不是推送控制器,您可以使用此代码

[self performSegueWithIdentifier:@"collectionViewSegue" sender:self];

您还可以使用 prepareForSegue 方法配置目标视图控制器。

   -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    DestinationViewController *targetVC = (DestinationViewCOntroller *)segue.destinationViewController;
    //if you pass anything you can do it here
    //if to set any public variable for example image for the imageview
    targetVC.cardImageView.image = [UIImage imageNamed:@"queen.png"];
}

此方法将在您的父控制器中。

于 2013-01-06T00:37:20.403 回答
0

通过 ctrl-click 初始 viewController 创建一个新的 segue 并拖动到目标 viewController。不要忘记设置 segue 标识符。而不是覆盖 -(void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 方法。

于 2013-01-05T19:04:38.560 回答