iPhoneとiPadの両方に1つのストーリーボードを使用して、Xcode(バージョン9.1 9B55)マスター - ディテールテンプレートを使用してプロジェクトを試行しています。iPhone上でUIPopoverPresentationControllerDelegateを呼び出す
サイズクラスが適切なときにポップオーバーを表示する組み込みのpopover segue、またはサイズクラスがコンパクトな場合のモーダルビューコントローラ(iPhoneはポートレート)を使用します。
私が見つけたのは、iPadでうまく動作するということですが、iPhoneで実行すると、予想通りにポップオーバーの外側に触れることができません。
iPadの場合、popoverPresentationControllerDidDismissPopoverが呼び出され、すべて正常です。
iPhoneの場合、popoverPresentationControllerDidDismissPopoverは呼び出されず、ポップオーバーを解除することはできません。
は、私がこれをしなかった、再現するには、次のは、App
新新しいマスター・ディテールの作成 - ファイル。ストーリーボードではMyPopoverViewController
と呼ばれるココアタッチクラス、:
は、新しいビューコントローラ、MyPopoverViewControllerに変更したクラスを作成します。
MasterViewControllerでは、バーボタンアイテム "Popover"を追加します。コントロールからこれをMyPopoverViewControllerにドラッグします。 segue Kindを「Popoverとして提示する」に設定します。識別子を "thePopover"に設定します。 MasterViewController.hで
は、UIPopoverPresentationControllerDelegateを追加します。MasterViewController.mで
@interface MasterViewController : UITableViewController <UIPopoverPresentationControllerDelegate>
:のviewDidLoadで
#import "MyPopoverViewController.h"
を、 "追加ボタン" を作成する2行をコメントアウト。 prepareForSegueで
:
- (void) prepareForPopoverPresentation:(UIPopoverPresentationController *)popoverPresentationController {
NSLog(@"MVC prepareForPopoverPresentation");
}
- (void) popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController {
NSLog(@"MVC popoverPresentationControllerDidDismissPopover");
}
- (BOOL) popoverPresentationControllerShouldDismissPopover:(UIPopoverPresentationController *)popoverPresentationController {
NSLog(@"MVC popoverPresentationControllerShouldDismissPopover");
return TRUE;
}
は、私もこれを試してみましたが、それがないすべては、ポートレートモードでの力のポップオーバー(私はしたくないもの)である:
} else if ([[segue identifier] isEqualToString:@"thePopover"]) {
NSLog(@"MVC prepareForSegue thePopover");
MyPopoverViewController *myPopoverController = segue.destinationViewController;
myPopoverController.popoverPresentationController.delegate = self;
}
3つのUIPopoverPresentationControllerDelegateのデリゲートメソッドを追加します。 ;ポップオーバーのデリゲートの呼び出しの欠如を変更しないと、私たちは、ポップオーバーを却下することはできません:
-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
return UIModalPresentationNone;
}
私は私がここに欠けているシンプルなものがある願っています。
https://github.com/johnstewart/MasterDetailPopoverTestProject
は、どのように私は、iPhoneにもポップオーバーの外に触れることによってpopoversを却下することができます:私は、上述した内容を正確にしている、ここではサンプルプロジェクトをアップロードしていますか?
ポップオーバーの外に触れるとPopOverが解除されます。あなたのデモは完全に機能しています。私はxcode 9.1とiphone 8 plus simulatorでテストしました。デリゲートメソッドが呼び出され、スムーズにその中に書かれたものが印刷されます –
Jitendra - 確認のために再ダウンロードしました。私はiPhone 8 +シミュレータでプロジェクトを実行しました。その後、横に回転させ、「Popover」ボタンをタッチしました。ポップオーバーの代わりにモーダルダイアログが表示され、ダイアログの外に触れることは却下されず、デリゲートメソッドも呼び出されません。 –