0

コレクションビューを含むビューがあります。このコレクション ビューをプログラムで (viewDidLoad で) 追加したので、ストーリーボードにはありません。このコレクション ビューには複数のセルが含まれています。ユーザーがコレクション ビューのセルの 1 つをクリックすると、別のビュー コントローラー (ストーリーボードに追加する予定) にセグエしたいと考えています。私の質問は、コレクション ビューがストーリーボードにないため、どうすればそこから抜けることができますか? または、それを達成する他の方法があります。

上記の元の質問に対するいくつかの更新:

Parent View Controller では、次のことを行います。

//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 枚のカードがあります。ユーザーがカードの 1 つをクリックすると、別のビュー コントローラーに移動します。

ご覧のとおり、コレクション ビューはストーリーボードにありません。それで、セグエを作成する方法はありますか?

ところで、1 つのオプションは、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;
    }
}

編集:ストーリーボード上でParentViewControllerからDestinationControllerに作成するセグエには、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

最初のviewControllerをCtrlキーを押しながらクリックして新しいセグエを作成し、目的のviewControllerにドラッグします。セグエ識別子を設定することを忘れないでください。-(void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender メソッドを上書きするよりも。

于 2013-01-05T19:04:38.560 に答える