0

当我再次按下操作按钮以打开我的活动视图时,我的应用程序在 iPad 模拟器中崩溃。我担心如果用户想再次按下按钮关闭 Popover 而不是触摸它的外部,这将是一个问题。任何建议表示赞赏:)

仅供参考,操作按钮是一个 UIToolbar 按钮。

在.h

@property (strong, nonatomic) UIPopoverController *popup;
@property (strong, nonatomic) UIPopoverController *activityViewProp;

在他们中:

-(IBAction)openUIActivityView:(id)sender {



    UIActivityViewController *activityView = [[UIActivityViewController alloc]initWithActivityItems:@"Hello World" applicationActivities:nil];


    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        [self presentViewController:activityView animated:YES completion:^{    
        }];
    } else {

self.popup = [[UIPopoverController alloc] initWithContentViewController:activityView];

[self.popup presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; }}
4

2 回答 2

1

只需检查您是否已经有弹出窗口,然后执行其他操作

-(IBAction)openUIActivityView:(id)sender {
    if (self.popup) {
        [self.popup dismiss ...];
    }
    else {
        // show popup code
    }
 }
于 2013-01-22T14:58:05.117 回答
0

问题是,视图控制器在任何给定时间只能呈现另一个视图控制器。目前,当您第二次点击按钮时,您会尝试呈现一个新的 UIActivityViewController 实例,而另一个实例已经呈现。

您可以通过检查主视图控制器presentedViewController属性的值来解决此问题。如果它不是 nil(实际上是 UIActivityViewController 类型),您可以从操作中返回而无需执行任何操作:

- (IBAction)openUIActivityView:(id)sender {
    if (!self.presentedViewController) {
        // We have no presented view controller yet.
        // <your current code here>
    } else {
        // We are already presenting a view controller.
        // Either dismiss it, or don't do anything.
}
于 2013-01-22T15:01:19.010 回答