iOS 7自定义UIActivity作为popup窗口
这是我在StackOverflow上的第一个问题,请耐心等待…
这是问题:
我已经创build了一个自定义的活动添加书签,这是从UIActivityViewController
打开。 在iPhone上,它被打开为一个模式,这是可以的。 但是在iPad上,我在Popover中打开了UIActivity
,并且还想在此Popover中打开自定义的BookmarkActivity。
方法
-(UIViewController *)activityViewController
在我的UIActivity
子类中的-(UIViewController *)activityViewController
看起来像这样:
- (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; } }
使用此代码,书签控制器在popup窗口中显示约0.2秒,然后popover消失。 如果我将属性nav.modalPresentationStyle
从UIModalPresentationCurrentContext更改为UIModalPresentationFormSheet ,bookmarkController正确显示,但在正常的popup窗口中。
我已经做了一些研究,并且find了两个链接:
UIActivity activityViewController在iPad上以模式呈现,而不是在popup窗口中呈现
– [UIActivity activityViewController]不在UIPopoverController中显示
他们两人都表示目前还不可能,但不知何故,这一定是可能的 – 它在Safari(也是“添加书签”function)中起作用。
所以问题是:
- 如何改变这个自定义视图控制器的行为,以便在popover中正确打开?
- 如果目前唯一的可能性是打开它作为一个正常popup窗口,有没有办法调整它? 我曾尝试更改导航控制器和书签控制器的大小和框架,但它不工作。
编辑:我已经联系了苹果关于这个,这里的解决scheme:
方法-(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; } }
而且popover中视图的代码已经被移到了-(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]; } }