UIModalPresentationStyle
アダプティブ スタイルに設定されたビュー コントローラーをモーダルに表示していますUIModalPresentationPopover
。このスタイルは、横にコンパクトな環境 (iPhone の縦長) で画面全体に表示されます。横レギュラー、縦コンパクト環境(iPhone 6 Plus横)の場合はフォームシートに表示されます。そして通常の通常環境(iPad)ではポップオーバーとして表示されます。これは望ましい動作です。
そのコントローラーが実際にどのように表示されるか (フォーム シート、全画面表示、またはポップオーバー) をプログラムで決定する必要があります。表示されているView Controller内からそれを判断するにはどうすればよいですか?
その理由は、ポップオーバー内にない場合にのみ、[完了] ボタンを追加する必要があるためです。(または、ポップオーバーにある場合は非表示にします。)
ビュー コントローラの作成:
let viewController = ...
viewController.modalPresentationStyle = .Popover
let popoverController = viewController.popoverPresentationController
popoverController?.barButtonItem = settingsButton
presentViewController(viewController, animated: true, completion: nil)
viewController の内部:
- (void)viewDidLoad {
[super viewDidLoad];
//self.modalPresentationStyle is Popover even in the case where it's presented over the full screen
//self.popoverPresentationController is not nil even when presented full screen
}