2016-01-20 6 views
2

У меня проблема с функцией 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

Пожалуйста, смотрите снимок экрана:

enter image description here

enter image description here

ответ

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]; 

Теперь вы можете изменить их порядок. Надеюсь, что эта помощь.

+0

Благодарим за помощь. Я только что реализовал. Все нормально. Итак, у меня есть более 8 таких функций, это значит, что я должен создать 8 класс. –

+0

Нет, не нужно. Создайте общий класс и сколько хотите, создайте для него столько, сколько экземпляров. Вам нужно иметь в виду, что 'activityType' каждого экземпляра должен быть другим. –

+0

> activityType каждого экземпляра должен быть другим. Да, я понимаю. Это правильно. Спасибо! –