ROADTO みちログ

ひとのみちのブログ。大阪でiOSアプリの道を歩くフリーランス。

サンプル UIPopoverController

UIPopoverControllerの実装サンプルです。

iOS7.0を前提としています。
storyboardは割愛しています。

hファイル

// delegate指定
interface ViewController : UIViewController <UIPopoverControllerDelegate>

mファイル

@interface ViewController ()

- (IBAction)tapBtn:(id)sender;
@property (strong, nonatomic) IBOutlet UIButton *btn;
@property (strong, nonatomic) UIPopoverController *popover;

@end
@implementation RDTViewController

- (IBAction)tapBtn:(id)sender {
    
    UIButton *btn = (UIButton*)sender;
    if (!self.popover) {
        // コンテンツビューを生成
        UIViewController *vc = [[UIViewController alloc] init];
        vc.view.backgroundColor = [UIColor redColor];
        
        // コンテンツビューのサイズを指定
        //vc.contentSizeForViewInPopover = CGSizeMake(200, 300);//iOS7.0よりpreferredContentSizeを使用。
        vc.preferredContentSize = CGSizeMake(200, 300);
        
        //vc.modalInPopover = YES;//modalのように使用する場合に指定
        
        // UIPopoverControllerを生成
        self.popover = [[UIPopoverController alloc] initWithContentViewController:vc];
        // delegateを指定
        self.popover.delegate = self;
    }
    // 表示場所、表示view、矢印の向きを指定して表示
    [self.popover presentPopoverFromRect:CGRectMake(btn.frame.size.width, btn.frame.size.height/2, 0, 0)
                                  inView:sender
                permittedArrowDirections:UIPopoverArrowDirectionAny
                                animated:YES];
    // ※ButtonItemから表示の場合はpresentPopoverFromBarButtonItemを使用する。
}

// プログラムで閉じる
// ※これを使用した場合、popoverControllerShouldDismissPopover や、
// popoverControllerDidDismissPopover は呼ばれない
- (void)dismissPopoverAnimated:(BOOL)animated {
    NSLog(@"%s",__func__);
}

// 閉じる直前に呼ばれる
- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController {
    NSLog(@"%s",__func__);
    return YES;
}

// 閉じた直後に呼ばれる
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    NSLog(@"%s",__func__);
}

@end

実行結果。
f:id:hitonomichi:20140323233148p:plain

中に表示するViewのサイズ指定を忘れがち。

自己紹介
メガネは売っていません
高浜 一道(たかはま かずみち)
大阪でiOSアプリの道を歩くフリーランス。
iPad・iPhoneとサーバを連携した、JSONやDBといったキーワードが出てくるツール系が多めです。
お仕事のご依頼やご連絡はこちらから。
お仕事ください!
Web : ROADTO
ML : k-takahama(a)roadto.jp

個人的なアカウントはこちら。
Tw : @hitonomichi
Fb : kazumichi.takahama