ios ipad UIPopoverController 显示为空且没有错误
Posted
技术标签:
【中文标题】ios ipad UIPopoverController 显示为空且没有错误【英文标题】:ios ipad UIPopoverController is showing empty with no errors 【发布时间】:2013-04-10 21:39:35 【问题描述】:我正在尝试实现一个 UIPopoverController 以便能够共享,但是当 UIPopoverController 视图显示为空时,我没有任何错误。这是我的代码:
if ([self.activityPopoverController isPopoverVisible])
[self.activityPopoverController dismissPopoverAnimated:YES];
else
NSString *textToShare=@"I'm sharing this image";
NSArray *activityItems = [[NSArray alloc]initWithObjects:self.imgToSend,textToShare,nil];
UIActivityViewController *activityVC=[[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
activityVC.excludedActivityTypes=@[UIActivityTypeAssignToContact,UIActivityTypeCopyToPasteboard ];
activityVC.completionHandler = ^(NSString *activityType, BOOL completed)
[self.activityPopoverController dismissPopoverAnimated:YES];
;
if (self.activityPopoverController)
[self.activityPopoverController setContentViewController:activityVC];
else
self.activityPopoverController = [[UIPopoverController alloc] initWithContentViewController:activityVC];
[self.activityPopoverController presentPopoverFromRect:[(UIControl *)sender frame]
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
你们中的任何人都知道为什么我的代码有问题吗?
非常感谢您的帮助。
更新:
我添加这行代码:
[self.activityPopoverController setPopoverContentSize:self.contentSizeForViewInPopover animated:YES];
但它看起来都被砍掉了:
【问题讨论】:
你是否在 UIActivityViewController 上设置 contentSizeInPopover 属性? 我不是 :( 我该怎么做? @HelenaM,我认为这不是原因,请检查我的答案。 contentSize 技巧具有误导性,您不应设置它。系统计算出activityViewController 的弹出框的contentSize。您将其任意设置为 viewController 视图的 contentSize,这是不正确的。我确定您的问题出在其他地方。 【参考方案1】:这里:
NSArray *activityItems = [[NSArray alloc]
initWithObjects:self.imgToSend,textToShare,nil];
UIActivityViewController *activityVC=[[UIActivityViewController alloc]
initWithActivityItems:activityItems
applicationActivities:nil];
如果self.imgToSend
是nil
,activityItems
将是nil
,你会得到一个空的弹出框。因此,您需要检查 self.imgToSend
是否已初始化。试试NSLog("imgToSend: %@",self.imgToSend)
看看这个案例。
数组是 nil 因为nil
是数组终止符,所以如果你的第一个对象是nil
,系统认为你的数组在那个点完成并且不会超越它(textToShare
,例如)
正如文档所说:
活动项目
此数组不能为 nil,且必须包含至少一个对象。
你可以通过交换你的两个数组项来检查我是否正确:
NSArray *activityItems = [[NSArray alloc]
initWithObjects:textToShare,self.imgToSend,nil];
更新 在您的更新问题中,您介绍了这一行:
[self.activityPopoverController setPopoverContentSize:self.contentSizeForViewInPopover
animated:YES];
你声称这修复了活动 PopoverController 通过填充项目,但控制器的框架设置错误。
这一行确实改变了 popOver 的框架,但出于所有错误的原因 - 您将框架任意设置为主机 viewController 的 contentSizeForViewInPopover - 不是正在显示的 viewController在弹出窗口中。你也可以在里面放一些任意的数字,例如:
[self.activityPopoverController setPopoverContentSize:(CGSize)300,400
animated:YES];
这也将重塑您的弹出框 - 但在这两种情况下,此代码都不负责 activityItems 的存在或不存在。
如果现在出现了 activiyItems,那么您一定也更改了其他内容。我建议您现在尝试在注释掉这一行的情况下运行您的代码:
// [self.activityPopoverController setPopoverContentSize:self.contentSizeForViewInPopover
// animated:YES];
并报告发生了什么。
我很确定你的问题在于self.imgToSend
。如果我小心地将 self.imgToSend
替换为本地设置的图像对象,我可以完全按照您的问题运行您的代码,并且 activiyItems 显示正确。
这成功了:
UIImage* image= [UIImage imageNamed:@"test.png"];
NSArray *activityItems = [[NSArray alloc]initWithObjects:image,@"text",nil];
这失败了(空的 popOverController):
UIImage* image= nil;
NSArray *activityItems = [[NSArray alloc]initWithObjects:image,@"text",nil];
这成功了:
UIImage* image= nil;
NSArray *activityItems = [[NSArray alloc]initWithObjects:@"text",image,nil];
这成功了:
UIImage* image= nil;
NSArray *activityItems = [[NSArray alloc]initWithObjects:@"text",nil];
我建议你把self.imgToSend
拿出来看看你的activityItems在没有它的情况下是否正确填充,那么至少你会知道问题出在哪里。
【讨论】:
图片要附加在邮件中,但不是nil activityitems 数组都不为空 @Helena,您能否在您的问题中添加NSLog
的activityItems
。如果你只是从数组中删除 self.imgToSend 会发生什么,那么它看起来如何?
我认为你没有抓住重点。问题不在于数组。问题是 UIPopoverController 在视图中的显示方式。
@HelenaM,您报告了一个空的 popOver 视图,这是由空数组引起的。只要 img 变量具有正确的内容,您的代码在我的系统上就可以正常工作,所以我仍然怀疑该变量存在一些问题。如果你只是删除它会发生什么,弹出框看起来如何? (没有那个contentSizeForViewInPopover
分心)。您更新的问题(带图像)没有显示空白视图,这里可能存在多个问题。问题不在于您报告的代码。以上是关于ios ipad UIPopoverController 显示为空且没有错误的主要内容,如果未能解决你的问题,请参考以下文章
Ipad图标大小Ipad设置ios 5-7 29pt 1x 2x - iPad聚光灯ios 7 40 pt - iPad app ios 7 76 pt [关闭]