I have problem with UIActivity
function.
The first, I create 3 activity items:
activityDownload
activityTrash
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:
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.