Objective c 当在iOS 8 UIActivityViewController和/或UIPopoverController外部单击时,不会丢失它们
我已经阅读了10多个stackoverflow解决方案,这些解决方案在iOS 8.0.2 ipad设备上都不起作用 目标是: 我想展示一个共享视图,当单击外部时,它会丢失 问题是: 代码在iOS 8.0以下运行良好 代码(尝试了许多版本…): 我补充说: UIPopoverControllerDelegate 我所尝试的: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空间之外
-(无效)触摸开始:(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;