【问题标题】:Lost item after sorting item in menu view在菜单视图中排序项目后丢失的项目
【发布时间】:2016-04-25 22:40:12
【问题描述】:

UIActivity 函数有问题。

首先,我创建了3个活动项:

  1. activityDownload
  2. activityTrash
  3. activityMove

并添加到UIActivityViewController 然后,当我提出 UIActivityViewController 时,其中包括上述 3 项。好的,这里没问题。 然后,当我单击更多按钮并对项目进行排序时,例如,我将“移动”按钮移动到顶部, 单击“完成”按钮后,我不知道为什么下载,垃圾邮件丢失了? 移动项目仅显示在 AirDrop 菜单视图中。

NSURL *url = [self fileToURL:self.documentName];
NSArray *objectsToShare = @[url];

AirDropActivityView *activityDownload = [[AirDropActivityView alloc] init];
activityDownload.airDropType = 0;
AirDropActivityView *activityTrash = [[AirDropActivityView alloc] init];
activityTrash.airDropType = 1;
AirDropActivityView *activityMove = [[AirDropActivityView alloc] init];
activityMove.airDropType = 2;

NSArray *uiActivitys = @[activityDownload,activityTrash,activityMove];
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:uiActivitys];

// Exclude all activities except AirDrop.
NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook, UIActivityTypePostToWeibo,UIActivityTypeMessage,UIActivityTypePrint, UIActivityTypeCopyToPasteboard UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll,UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,UIActivityTypePostToVimeo,UIActivityTypePostToTencentWeibo];
controller.excludedActivityTypes = excludedActivities;

// Present the controller
[self presentViewController:controller animated:YES completion:nil];

https://gist.github.com/tranhieutt/f73999234339f31aa86c

请看截图:

【问题讨论】:

    标签: ios uiactivityviewcontroller uiactivity


    【解决方案1】:

    这可能是您正在使用的所有自定义 UIActivity 视图,具有相同的 activityType 会导致此问题。

    所以我建议为您要使用的每个视图创建更多自定义UIActivity。像这样:

    创建AirDropActivityView1; 在AirDropActivityView1.m,实现:

    #import "AirDropActivityView1.h"
    
    @implementation AirDropActivityView
    
    - (NSString *)activityType
    {
        return @"youapp.Activity1";
    }
    
    - (NSString *)activityTitle
    {
        return @"Activity1";
    }
    
    - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems
    {
        return YES;
    }
    
    @end
    

    还有AirDropActivityView2.m

        #import "AirDropActivityView2.h"
    
        @implementation AirDropActivityView
    
        - (NSString *)activityType
        {
            return @"youapp.Activity2";
        }
    
        - (NSString *)activityTitle
        {
            return @"Activity2";
        }
    
        - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems
        {
            return YES;
        }
    
        @end
    

    最后:

        AirDropActivityView1 *activity1 = [[AirDropActivityView1 alloc] init];
    
        AirDropActivityView2 *activity2 = [[AirDropActivityView2 alloc] init];
    
        NSArray *uiActivitys = @[activity1,activity2];
    

    现在您可以重新排序。 希望对您有所帮助。

    【讨论】:

    • 感谢您的帮助。我刚刚实施。没关系。所以,我有超过 8 个这样的函数,这意味着我必须创建 8 个类。
    • 不,不需要。创建一个通用类,以及您想要多少视图,为此创建尽可能多的实例。您需要记住的一件事是每个实例的activityType 必须不同。
    • > 每个实例的activityType 必须不同。是的,我明白了。它是正确的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多