容器视图中的 UIActivityViewController

Posted

技术标签:

【中文标题】容器视图中的 UIActivityViewController【英文标题】:UIActivityViewController inside a Container View 【发布时间】:2013-06-03 10:50:57 【问题描述】:

我在容器视图中使用 UIActivityViewController。我想通过电子邮件、推特和脸书分享一些文字。虽然最后两个工作完美,但电子邮件有问题。问题是作曲家视图不会通过取消事件或尝试发送它来消除!当 ActivityView 出现时,我收到以下消息:

Launch Services: Registering unknown app identifier com.apple.mobilemail failed 
Launch Services: Unable to find app identifier com.apple.mobilemail

这很奇怪,因为应用标识符确实没有问题,而且我可以在其他视图控制器中使用 ActivityViewController 与电子邮件共享文本(当不在容器视图中时)。 我的代码,如下:

- (void)openBtnTouched 
    NSString *alertTitleString = [[[GlobalVariables sharedInstance].alertsArray objectAtIndex:self.selectedIndex]objectForKey:@"alertTitle"];
    NSString *alertMsgString = [[[GlobalVariables sharedInstance].alertsArray objectAtIndex:self.selectedIndex]objectForKey:@"alertMessage"];

    UIActivityViewController *activity;

    activity = [[UIActivityViewController alloc] initWithActivityItems:@[alertTitleString,alertMsgString] applicationActivities:nil];

    activity.excludedActivityTypes = @[
                                       UIActivityTypeMessage,
                                       UIActivityTypePostToWeibo,
                                       UIActivityTypeSaveToCameraRoll,
                                       UIActivityTypeAssignToContact,UIActivityTypeCopyToPasteboard];

    activity.completionHandler = ^(NSString *activityType, BOOL completed)
        NSLog(@"Activity Type selected: %@", activityType);
        if (completed) 
            NSLog(@"Selected activity was performed.");
         else 
            if (activityType == NULL) 
                NSLog(@"User dismissed the view controller without making a selection.");
             else 
                NSLog(@"Activity was not performed.");
            
        
    ;
    [self presentViewController:activity animated:YES completion:NULL];

【问题讨论】:

【参考方案1】:

我不确定您的应用是为 iPhone、iPad 还是两者设计的,但 Apple 非常具体说明了如何显示 UIActivityViewController。来自their documentation:

在展示视图控制器时,您必须使用适用于当前设备的适当方式。在 iPad 上,您必须在弹出窗口中显示视图控制器。在 iPhone 和 iPod touch 上,您必须以模态方式呈现。

如果您以其他方式(即在容器视图控制器中)显示它,您很可能会遇到这种奇怪的行为。我建议您按照 Apple 的建议显示活动视图控制器。

【讨论】:

以上是关于容器视图中的 UIActivityViewController的主要内容,如果未能解决你的问题,请参考以下文章

将数据从容器视图中的 tableview 中的静态单元格发送到 Swift 中的视图控制器

容器视图中的 UI 未更新

容器视图中的 Tableview 溢出问题

包含模型数据的容器视图中的页面视图控制器

子容器视图中的 UILabel 未更新

容器视图中的 UIActivityViewController