2

I have problem with UIActivity function.

The first, I create 3 activity items:

  1. activityDownload
  2. activityTrash
  3. activityMove.

And add to UIActivityViewController And then, when I present UIActivityViewController which includes 3 items above. OK, no problem here. Then, when I click button More, and sort items, ex, I move "Move" button to the top, After click "Done" button, I don't know why Download, Trash items was lost? Move items only displays in AirDrop menu view.

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

Please see screen-shot:

enter image description here

enter image description here

Nam Vu
  • 5,669
  • 7
  • 58
  • 90
Trần Trung Hiếu
  • 1,373
  • 1
  • 10
  • 12

1 Answers1

1

This could be all your Custom UIActivity views you're using that having the same activityType will cause this problem.

So I recommend to create each more Custom UIActivity for each View you want to use. Like this:

Create AirDropActivityView1; In AirDropActivityView1.m, implement:

#import "AirDropActivityView1.h"

@implementation AirDropActivityView

- (NSString *)activityType
{
    return @"youapp.Activity1";
}

- (NSString *)activityTitle
{
    return @"Activity1";
}

- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems
{
    return YES;
}

@end

And with AirDropActivityView2.m

    #import "AirDropActivityView2.h"

    @implementation AirDropActivityView

    - (NSString *)activityType
    {
        return @"youapp.Activity2";
    }

    - (NSString *)activityTitle
    {
        return @"Activity2";
    }

    - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems
    {
        return YES;
    }

    @end

Finally:

    AirDropActivityView1 *activity1 = [[AirDropActivityView1 alloc] init];

    AirDropActivityView2 *activity2 = [[AirDropActivityView2 alloc] init];

    NSArray *uiActivitys = @[activity1,activity2];

Now you can reorder them. Hope this help.

Nghia Luong
  • 790
  • 1
  • 6
  • 11
  • Thank for your help. I just implemented. It's OK. So, I have more than 8 functions like that, it's mean i must create 8 class. – Trần Trung Hiếu Jan 21 '16 at 10:30
  • No, no need to. Create a general class, and how many view you want, create as many as instances for that. One thing you need keep in mind is that the `activityType` of each instance must be different. – Nghia Luong Jan 21 '16 at 10:45
  • > activityType of each instance must be different. Yes, I understand.It's correct. Thank you! – Trần Trung Hiếu Jan 21 '16 at 11:14