Objective c 当在iOS 8 UIActivityViewController和/或UIPopoverController外部单击时,不会丢失它们

Objective c 当在iOS 8 UIActivityViewController和/或UIPopoverController外部单击时,不会丢失它们,objective-c,ios8,xcode6,uipopovercontroller,uiactivityviewcontroller,Objective C,Ios8,Xcode6,Uipopovercontroller,Uiactivityviewcontroller,我已经阅读了10多个stackoverflow解决方案,这些解决方案在iOS 8.0.2 ipad设备上都不起作用 目标是: 我想展示一个共享视图,当单击外部时,它会丢失 问题是: 代码在iOS 8.0以下运行良好 代码(尝试了许多版本…): 我补充说: UIPopoverControllerDelegate 我所尝试的: -(无效)触摸开始:(NSSet*)触摸事件:(UIEvent*)事件 一旦 超控器 显示视图时会丢失焦点,并且不会注册触摸。因此,我不能在self.act rect空间之外

我已经阅读了10多个stackoverflow解决方案,这些解决方案在iOS 8.0.2 ipad设备上都不起作用

目标是:

我想展示一个共享视图,当单击外部时,它会丢失

问题是:

代码在iOS 8.0以下运行良好

代码(尝试了许多版本…):

我补充说:

UIPopoverControllerDelegate

我所尝试的:

-(无效)触摸开始:(NSSet*)触摸事件:(UIEvent*)事件

一旦

超控器

显示视图时会丢失焦点,并且不会注册触摸。因此,我不能在self.act rect空间之外处理触碰,以迫使一个dismisal

还有

NSArray *dataToShare = @[url];  // ...or whatever pieces of data you want to share.
            UIActivityViewController* activityViewController =
            [[UIActivityViewController alloc] initWithActivityItems:dataToShare
                                              applicationActivities:nil];
            activityViewController.modalInPopover = YES;

            UIPopoverPresentationController *presentationController = [activityViewController popoverPresentationController];
            presentationController.sourceView = self.view; // if button or change to self.view.

            [self.parentViewController  presentViewController:activityViewController animated:YES completion:nil];
我试图从家长那里展示UIActivityViewController和UIPopoverController,但效果并不理想

请帮帮我,我花了半天时间做了一件蠢事,它在iOS 7.1上运行,而在iOS 8+上运行,这太荒谬了,我仍然不知道为什么

我将尝试添加取消按钮,该按钮在iOS8+中也已消失

更新1:

在UIBarButtonItem中添加UIButton没有帮助

UIButton *control = (UIButton *) sender;
                [control setFrame:CGRectMake(300, 300, 100, 100)];
                [control setBackgroundColor:[UIColor redColor]];
                UIBarButtonItem *barButtonItemView = [[UIBarButtonItem alloc] init];
                [barButtonItemView setCustomView:control];
                [self.popup presentPopoverFromBarButtonItem:barButtonItemView permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
更新日期2-19.12.2014。(iOS 7.1.-8.1.2):

公认的答案适用于iOS 8.1。我在iOS 7.1上有一些错误。所以我对它进行了修改,使之适用于iOS 7.1。我已经在回答下面的注释中说明了代码在哪些设备上工作

// publish - sharing
        NSArray *dataToShare = @[url];  // ...or whatever pieces of data you want to share.
        UIActivityViewController* activityViewController =
        [[UIActivityViewController alloc] initWithActivityItems:dataToShare
                                          applicationActivities:nil];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        NSLog(@" SHARING - 1 - ");
        [self presentViewController:activityViewController animated:YES completion:^{}];
    }
    else
    {
        // Change Rect to position Popover
        NSLog(@" SHARING - 2 - ");
        self.popup = [[UIPopoverController alloc] initWithContentViewController:activityViewController];

        [self.popup presentPopoverFromRect:CGRectMake(self.view.frame.size.width * 3 / 5 ,
                                                      self.view.frame.size.width/2,
                                                      self.view.frame.size.width/10,
                                                      self.view.frame.size.width/10) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }

再加上这个怎么样

UIActivityViewController* activityViewController =
            [[UIActivityViewController alloc] initWithActivityItems:dataToShare
                                              applicationActivities:nil];
            activityViewController.modalInPopover = YES;

activityViewController.popoverPresentationController.sourceView = self.view;

我在iOS 8.1.2(iPad)上测试了这段代码,但仍然不能正常工作。在共享视图外单击不会将其取消。仅使用此代码根本不起作用:(共享的触发器是什么?(例如,按下共享按钮)我将显示在我的程序中起作用的部分代码。
-(iAction)shareButton:(id)发件人{NSArray*items=@[您要共享的内容];UIActivityViewController*activityViewController=[[UIActivityViewController alloc]initWithActivityItems:items应用程序活动:应用程序活动];activityViewController.popoverPresentationController.sourceView=self.view;[self-presentViewController:activityViewController动画:是完成:否];}
您编写的注释代码是正确的,适用于iOS 8.1.2.Ty m8:)。我已编辑了您的帖子,在审阅后我将接受答案。问题出在“activityViewController.ModAlinPover=YES;”代码行。删除它解决了问题。我添加了一些修改,使代码适用于iOS 7.1.0-iOS 8.1.2。完整的修改将在问题的更新代码中可见。代码已在(设备)上测试:iPod和iPad 2(iOS 8.1.2)以及所有模拟器(iOS 7.1和8.1)。
UIActivityViewController* activityViewController =
            [[UIActivityViewController alloc] initWithActivityItems:dataToShare
                                              applicationActivities:nil];
            activityViewController.modalInPopover = YES;

activityViewController.popoverPresentationController.sourceView = self.view;