Fork me on GitHub

UIPopoverController,グダグダですよね. 階層的に表示すると審査で文句言われるし,ビューコントローラからUIPopoverControllerのインスタンスにアクセスできないし,UIPopoverControllerを破棄してもインスタンスは開放されないし,容易に多重表示されちゃうし・・・・. とりあえず,グダグダです.

そこで,仕方がないのでiOS7のUIっぽいオリジナルのポップオーバーを作りました.

[cpp]
@interface UIViewController (UZMultipleLayeredPopoverController)
- (void)dismissCurrentPopoverController;
- (void)dismissMultipleLayeredPopoverController;
- (void)presentMultipleLayeredPopoverWithViewController:(UIViewController)viewController
                      contentSize:(CGSize)contentSize
                        fromRect:(CGRect)fromRect
                         inView:(UIView
)inView
                       direction:(UZMultipleLayeredPopoverDirection)direction;
@end
[/cpp]

これら3つのメソッドだけで利用することができます. ポップオーバー上に表示するビューは,ビューコントローラをセットして作ります. このため,従来のUINavigcationControllerのように使うことができます. たとえば,以下のようなコードで,Storyboardから生成したビューコントローラをポップオーバー上に配置できます.

[cpp]
id viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NavigationController"];
[self presentMultipleLayeredPopoverWithViewController:viewController
                     contentSize:CGSizeMake(320, 480)
                       fromRect:button.frame
                        inView:self.view
                      direction:UZMultipleLayeredPopoverAnyDirection];
[/cpp]

ソースは,BSDライセンスでgithubで公開しています. 使ってみてください.

github