1

その中にいくつかのボタンとラベルを持つカスタム UICollectionViewCell を作成しました。ポップオーバーを介して別のビューを表示するには、各ボタンが必要です。ボタンにセグエを付けようとしたところ、コンパイル エラーが発生しました。

".../MainStoryboard_iPad.storyboard: Couldn't compile connection: <IBCocoaTouchOutletConnection:0x4012ea380  <IBProxyObject: 0x4012d7600> => anchorView => <IBUICollectionViewCell: 0x4012d06a0>>"

プロトタイプセル自体にセグエを入れてみましたが、同じ結果でした。ボタンとラベルからすべての IBOutlets を削除しましたが、コンパイル エラーが発生します。

コレクションビューセルをアウトレットとセグエに適切に設定するにはどうすればよいですか? これを行うチュートリアルを見たことがありますが、単に機能していません。

ティア!

ジャネン

4

1 に答える 1

1

これが私のために働いたものです。各コレクション ビュー セルに、ポップアップを表示するボタンが必要でした。

まず、Interface Builder で、ストーリーボードに新しいビュー コントローラーを作成しました。このビュー コントローラーは、ユーザーがボタンに触れたときの宛先ポップオーバーです。IB では、Identity Inspector でこのビュー コントローラーに必ず Storyboard ID を指定してください。私は「destinationView」を使用しました。Attributes Inspector で、Size を「Form Sheet」に設定し、Presentation を「Form Sheet」に設定しました。

ソース ビュー コントローラーのコレクション ビューのコレクション ビュー セルにボタンをドロップしました。

ソース ビュー コントローラーで、ボタンを処理するメソッドを作成しました。

- (IBAction)handleButton:(id)sender

次に、Interface Builder のソース ビュー コントローラーで、そのボタン アクションをそのメソッドに接続しました。

この関数のコードは次のようになります。

- (IBAction)handleButton:(id)sender
{
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

    // get an instance of the destination view controller 
    // you can set any info that needs to be passed here 
    // just use the "sender" variable to find out what view/button was touched
    DestinationViewController *destVC = [storyboard instantiateViewControllerWithIdentifier:@"destinationView"]; 

    // create a navigation controller (so we can have buttons and a title on the title bar of the popover) 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:destVC];

    // say that we want to present it modally 
    [navController setModalPresentationStyle:UIModalPresentationFormSheet];

    // show the popover 
    [[self navigationController] presentViewController:navController animated:YES completion:^{

    }]; 
}

目的のビュー コントローラーに、タイトルと、ポップオーバーを閉じるための [完了] ボタンを追加しました。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissExampleButton:)];

    self.title = @"Example Title";
}

- (IBAction)dismissExampleButton:(id)sender
{
    [[self parentViewController] dismissViewControllerAnimated:YES completion:^{

    }]; 
}

代わりにセグエを使用しようとしたことに注意してください。ただし、ポップアップは機能しませんでした。IBの設定が「フォームシート」であったにもかかわらず、新しいフルサイズの宛先ビューコントローラーにアニメーション化されただけです。上記のように IB で宛先 View Controller をセットアップし、ソース View Controller から宛先 View Controller へのセグエを作成しました。「exampleSegue」のように、属性インスペクターでセグエに識別子を付けました。そして、ボタンをソース ビュー コントローラーのアクションに接続しました。

このようにすると、ソース ビュー コントローラーは次のようになります。

- (IBAction)handleButton:(id)sender
{
    [self performSegueWithIdentifier:@"exampleSegue" sender:sender];
}

そして、宛先ビュー コントローラーにデータを取得するために、ソース ビュー コントローラーにもこれを実装しました。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"exampleSegue"]) {

        DestinationViewController *destViewController = (DestinationViewController *)[segue destinationViewController];

        // give the destViewController additional info here
        // destViewController.title.text = @"blah"; 
        // etc. 
    } 
}
于 2013-02-25T10:29:56.237 に答える