サンプル 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
実行結果。
中に表示するViewのサイズ指定を忘れがち。