これは StackOverflow に関する私の最初の質問なので、しばらくお待ちください...
問題は次のとおりです。
ブックマークを追加するためのカスタム アクティビティを作成しましたUIActivityViewController
。iPhone ではモーダルとして開かれますが、これで問題ありません。しかし、iPad ではポップオーバーで開きUIActivity
、カスタム BookmarkActivity もこのポップオーバーで開く必要があります。
方法
-(UIViewController *)activityViewController
私のUIActivity
サブクラスでは次のようになります。
- (UIViewController *)activityViewController {
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
GlobalBookmarksAddViewController *bookmarkViewController = [self.parentController.storyboard instantiateViewControllerWithIdentifier:@"GlobalBookmarksAddViewController"];
bookmarkViewController.openedDocument = self.openedDocument;
bookmarkViewController.yAxis = self.yAxis;
bookmarkViewController.parentActivity = self;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:bookmarkViewController];
nav.modalInPopover = YES;
//nav.modalPresentationStyle = UIModalPresentationFormSheet;
nav.modalPresentationStyle = UIModalPresentationCurrentContext;
return nav;
} else {
GlobalBookmarksAddViewController *bookmarkViewController = [self.parentController.storyboard instantiateViewControllerWithIdentifier:@"GlobalBookmarksAddViewController"];
bookmarkViewController.openedDocument = self.openedDocument;
bookmarkViewController.yAxis = self.yAxis;
bookmarkViewController.parentActivity = self;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:bookmarkViewController];
return nav;
}
}
このコードでは、ブックマーク コントローラーがポップオーバーに約 0.2 秒間表示された後、ポップオーバーが消えます。プロパティnav.modalPresentationStyle
をUIModalPresentationCurrentContextからUIModalPresentationFormSheetに変更すると、bookmarkController は正しく表示されますが、通常のポップアップで表示されます。
私はすでにいくつかの調査を行い、2 つのリンクを見つけました:
UIActivity activityViewController がポップオーバーではなく iPad でモーダルに
表示される
どちらも、現時点では不可能であると示唆していますが、どういうわけか可能である必要があります-Safariで動作します(「ブックマークの追加」機能も)。
質問は次のとおりです。
- カスタムView Controllerのこの動作をポップオーバーで正しく開くように変更するにはどうすればよいですか?
- 現時点で唯一の可能性が通常のポップアップとして開くことである場合、サイズを変更する方法はありますか? ナビゲーション コントローラーとブックマーク コントローラーのサイズとフレームを変更しようとしましたが、うまくいきません。
編集:これについてAppleに連絡しました。解決策
は次
のとおりです。メソッドは次の-(UIViewContreoller *)activityController
ようになります。
-(UIViewController *)activityViewController
{
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
{
return nil;
}
else
{
GlobalBookmarksAddViewController *bookmarkViewController = [self.parentController.storyboard instantiateViewControllerWithIdentifier:@"GlobalBookmarksAddViewController"];
bookmarkViewController.openedDocument = self.openedDocument;
bookmarkViewController.yAxis = self.yAxis;
bookmarkViewController.parentActivity = self;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:bookmarkViewController];
return nav;
}
}
また、ポップオーバーのビューのコードは-(void)performActivity
メソッドに移動されました:
-(void)performActivity
{
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
{
GlobalBookmarksAddViewController *bookmarkViewController = [self.parentController.storyboard instantiateViewControllerWithIdentifier:@"GlobalBookmarksAddViewController"];
bookmarkViewController.openedDocument = self.openedDocument;
bookmarkViewController.yAxis = self.yAxis;
bookmarkViewController.parentActivity = self;
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:bookmarkViewController];
nav.modalInPopover = YES;
nav.modalPresentationStyle = UIModalPresentationCurrentContext;
// self.activityController is my own property set for the activity after the UIActivityViewController is created
[self.activityController presentViewController:nav animated:YES completion:NULL];
}
}