iPad専用のPopOverControllerを使ってみた

こんにちは、@yoheiMuneです。
今日は、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を使えるようになった(*´∇`*)カンタンに使えて、使いやすいインターフェースって良いですね。これから使っていこっと。
以下は、関連サイトです。ご参考になれば幸いです。