私はこの質問に対してTravis M.が提供した解決策を使いたいと思います。 アダプティブストーリーボードでiPhoneポップオーバーを解除する方法
しかし、私は以下を目的cに翻訳する必要があります。
誰でも手伝うことができますか?
あなたが望むのがあなたのiPad上のポップオーバーだがあなたのiPhone上の閉じるボタンを持つモーダルシートなら、あなたはポップオーバーのためにストーリーボードに追加のナビゲーションコントローラを作成せずにそれを行うことができます。
Xcode 6.3ストーリーボードでは、単にView Controllerを接続してセグエを「Present as Popover」として指定します。
以下のコードは、ポップオーバー自体ではなく、ポップオーバーをセグメント化するView Controllerに含める必要があります。
まずポップオーバーデリゲートを設定します。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "myPopoverSegueName") {
let vc = segue.destinationViewController
vc.popoverPresentationController?.delegate = self
return
}
}
次に、デリゲートエクステンション(View Controllerのコードの下)を追加し、その場でNavigation Controller / Closeボタンを作成します。
extension myViewController: UIPopoverPresentationControllerDelegate {
func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
let btnDone = UIBarButtonItem(title: "Done", style: .Done, target: self, action: "dismiss")
let nav = UINavigationController(rootViewController: controller.presentedViewController)
nav.topViewController.navigationItem.leftBarButtonItem = btnDone
return nav
}
}
次に、デリゲートエクステンション(View Controllerのコードの下)を追加し、その場でNavigation Controller / Closeボタンを作成します。
extension myViewController: UIPopoverPresentationControllerDelegate {
func presentationController(controller: UIPresentationController, viewControllerForAdaptivePresentationStyle style: UIModalPresentationStyle) -> UIViewController? {
let btnDone = UIBarButtonItem(title: "Done", style: .Done, target: self, action: "dismiss")
let nav = UINavigationController(rootViewController: controller.presentedViewController)
nav.topViewController.navigationItem.leftBarButtonItem = btnDone
return nav
}
}
それからあなたはあなたのdismiss機能を追加し、あなたは行ってもいいはずです:
func dismiss() {
self.dismissViewControllerAnimated(true, completion: nil)
}
回答:
回答№1は0それは「目的cとそれほど変わらない。あなたはおそらくそれを見ることによって何が起こっているのか理解することができるだろう。それはただプロトコルの一部を実行し実行するための準備をセットアップすることです。
myViewControllerは、それ自体をUIAdaptivePresentationControllerDelegateに準拠していると宣言する必要があります。それからこれがコードです。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"myPopoverSegueName"]) {
UIViewController *viewController = segue.destinationViewController;
viewController.popoverPresentationController.delegate = self
}
}
- (UIViewController *)presentationController:(UIPresentationController *)controller
viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style
{
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismiss)];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller.presentedViewController];
navController.topViewController.navigationItem.leftBarButtonItem = doneButton;
}
-(void) dismiss
{
[self dismissViewControllerAnimated:YES completion:nil];
}
拡張子やカテゴリを使用する必要はありません。これがTravis Mの言っていることを保証するものではありません。