[XCODE] iPad専用のPopOverControllerを使ってみた
今日は、iPad専用のPopOverControllerの使い方を学んだので、ブログに残しておきたいと思います。
PopOverControllerとは
以下画像のようなユーザーインターフェースです。画面の一部を覆うようなViewが出現して、その中で表示したり、ユーザーに選択してもらったりするユーザーインターフェースです。
このPopOverControllerは、PopOver部分以外をユーザーがタップすると消えるようになっています。そのため、モーダルViewよりもユーザーに使いやすい(ユーザーが行動を選択しやすい)インターフェースです。
パスワード入力などの必須操作の場合には、モーダルViewを使ってユーザー操作をブロックするのが良いかもですが、ユーザーに任意の操作を選択してもらう場合には、PopOverを使うのが良いのかと思います。
PopOverには、多くのViewを表示出来ます。普通のView、ImageView、TableView、NavigationView、TabViewなどなど。今回は、普通のViewをPopOverに表示するようにしています。
PopOverを表示する
PopOverを表示するには、以下の内容を実装します。
1、PopOverに表示するViewControllerのインスタンスを作成する
2、(任意)PopOverの領域の大きさを設定する
3、PopOverのインスタンスを作成する
4、(任意)PopOverのdelegateを設定する
5、PopOverを表示する
実装例は、以下となります。今回は、画面左上のBarButtonをタップされた際に、PopOverが表示されるようにしています。
- (IBAction) tapAction : (id)sender { // senderは、UIBarButtonItem if (popController == nil) { // popControllerはフィールドに存在する変数 // 1、PopOverに表示するViewControllerのインスタンスを作成する UIViewController *vc = [[[PopContentViewController alloc] init] autorelease]; // 2、(任意)PopOverの領域の大きさを設定する //vc.contentSizeForViewInPopover = vc.view.frame.size; // 3、PopOverのインスタンスを作成する popController = [[UIPopoverController alloc] initWithContentViewController:vc]; // 4、(任意)PopOverのdelegateを設定する。この場合、selfはUIPopoverControllerDelegateプロトコルを実装する必要がある。でも基本的には、delegateを使う用途はないかなぁ。 // popController.delegate = self; // popOverに表示するViewがタップされた場合に、PopOverを消したいので、ジェスチャーを登録しておく UITapGestureRecognizer *tap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapContent:)] autorelease]; [vc.view addGestureRecognizer:tap]; } // 5、PopOverを表示する [popController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; }
PopOverの表示を消す
PopOverの表示を消すのは、カンタン!以下のような実装をすれば、popOverの表示を消す事が出来ます。
// PopOverを表示する際に、PopOverの中に表示するViewに設定したタップイベント用のメソッド。 - (void) tapContent:(id)sender { // PopOverの表示を消す [popController dismissPopoverAnimated:YES]; }
参考サイト
以下のリファレンスを参考にしました。ありがとうございます。
View Controller Programming Guide for iOS
最後に
iPad用のPopOverを使えるようになった(*´∇`*)カンタンに使えて、使いやすいインターフェースって良いですね。これから使っていこっと。