これが私のために働いたものです。各コレクション ビュー セルに、ポップアップを表示するボタンが必要でした。
まず、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.
}
}