2016-03-28 51 views
2

iPad上ではUIPopoverPresentationControllerはうまく動作しますが、iPhoneでは常にフルウィンドウのモーダルポップアップを表示しています。私は、次のコードを使用しています:UIPopoverPresentationControllerはiPhoneで全画面モーダルを表示しています

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
MySecondViewController *contentVC = [storyboard instantiateViewControllerWithIdentifier:@"Pop"]; 
contentVC.modalPresentationStyle = UINavigationControllerOperationPop; // 13 
UIPopoverPresentationController *popPC = contentVC.popoverPresentationController; // 14 
contentVC.popoverPresentationController.sourceRect =CGRectMake(100, 130, 280, 230); 
self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100); 
//self.showPop.frame; // 15 
contentVC.popoverPresentationController.sourceView = 
self.showPop; // 16 
popPC.permittedArrowDirections = UIPopoverArrowDirectionAny; // 17 
popPC.delegate = self; //18 
[self presentViewController:contentVC animated:YES completion:nil]; 

-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller { 
    return UIModalPresentationNone; 
} 
+0

http://stackoverflow.com/questions/28521583/uipopoverpresentationcontroller-on-iphone-doesnt-produce-popover – gabbler

答えて

4

In ViewController.hまず、UIPopoverPresenatationControllerのプロパティを作成します。その後PopOverPresentationcontroller

UINavigationController *destNav = [[UINavigationController alloc] initWithRootViewController:dateVC];/*Here dateVC is controller you want to show in popover*/ 
      dateVC.preferredContentSize = CGSizeMake(280,200); 
      destNav.modalPresentationStyle = UIModalPresentationPopover; 
      _dateTimePopover8 = destNav.popoverPresentationController; 
      _dateTimePopover8.delegate = self; 
      _dateTimePopover8.sourceView = self.view; 
      _dateTimePopover8.sourceRect = [sender frame]; 
      destNav.modalPresentationStyle = UIModalPresentationPopover; 
      destNav.navigationBarHidden = YES; 
      [self presentViewController:destNav animated:YES completion:nil]; 

を表示する

@property(nonatomic,retain)UIPopoverPresentationController *dateTimePopover8; 

あなたは私たちがクリックしたときにalso.Itが自動的に非表示になり、新たな方法でこれを非表示にする必要があり、我々はビューコントローラを提示する代わりにpopOver.Soを提示していることに気づいている必要があります画面上で。

-(void)hideIOS8PopOver 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

私たちは、実装ファイルでのデリゲートメソッド以下の実施file.WriteにUIPopoverPresenatationControllerのデリゲートを実装する必要があります。

- (UIModalPresentationStyle) adaptivePresentationStyleForPresentationController: (UIPresentationController *) controller { 
    return UIModalPresentationNone; 
} 
+0

それは動作します。ありがとうございます –

+0

ようこそ:) –

2

ポップオーバー・コントローラは、専用のiPadデバイス上で使用するためのものです。

編集:iOSの8以降、Sobermanで述べたように、それは公開APIを使用してiPhone上popoversを提示することができるので、この答えはもうおそらく関係ありません。 UIPopoverController上のAppleのドキュメントに記載されているように

ポップオーバー・コントローラは、専用のiPadデバイス上で使用するためのものです。 残念ながら、このクラスをiPhoneアプリケーションで使用する方法はありません。しかし、iPhoneのサポートなどを追加するUIPopoverControllerによって提供される機能のカスタムサードパーティの実装がいくつかあります。たとえば、https://github.com/50pixels/FPPopoverを参照してください。

編集:iPhone/iPadの価値チェックアウトのための別の高度にカスタマイズ可能なポップオーバー実装もあります:https://github.com/nicolaschengdev/WYPopoverController

+0

は答えをいただき、ありがとうございます。 –

+0

あなたが満足すれば、投票して同意してください。 –

+0

ありがとう。それが他の人にも役立つと思うなら、質問を投票してください。ありがとう。 –

関連する問題