2015-03-24 5 views
0

У меня возникли проблемы с удалением нескольких объектов, выбранных в UICollectionView, из моего собственного UIActivity.Удалить объекты в CollectionView из UIActivity

FilesCollectionController.h

@property(nonatomic,weak) IBOutlet UICollectionView *collectionView; 

Этот вид коллекции использует пути к файлам, чтобы показать изображения.

FilesCollectionController.m

... 
ActivityTrash *trash = [[ActivityTrash alloc] init]; 
NSMutableArray *customActivities = [[NSMutableArray alloc] initWithObjects:trash, nil]; 

UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsSelected applicationActivities:customActivities]; 
UINavigationController *destNav = [[UINavigationController alloc] initWithRootViewController:controller]; 
... 
// Present the Navigation controller 
[self presentViewController:destNav animated:YES completion:nil]; 

ActivityTrash.h

@interface ActivityTrash : UIActivity 

@property(nonatomic,retain) NSMutableArray *objectsToDelete; 

@end 

ActivityTrash.m

@implementation ActivityTrash 

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

- (UIImage *) activityImage { 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     return [UIImage imageNamed:@"ipadTrash"]; 
    } 
    else 
    { 
     return [UIImage imageNamed:@"iphoneTrash"]; 
    } 
} 

- (BOOL) canPerformWithActivityItems:(NSArray *)activityItems 
{ 
    return ([activityItems count] != 0); 
} 

- (void) prepareWithActivityItems:(NSArray *)activityItems 
{ 
    self.objectsToDelete = [[NSMutableArray alloc] init]; 
    for (NSURL *url in activityItems) { 
     [self.objectsToDelete addObject:[url path]]; 
    } 
} 

- (UIViewController *) activityViewController 
{ 
    return nil; 
} 


- (void)performActivity { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Delete file(s)" 
                message:@"Are you sure ?" 
                delegate:self 
              cancelButtonTitle:@"Cancel" 
              otherButtonTitles:@"OK", nil]; 
    alert.alertViewStyle = UIAlertViewStyleDefault; 
    [alert show]; 
} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    // If the user pressed ok, delete each image which path is in objectsToDelete 
    if (buttonIndex == 1) { 
     for (NSString *pathImage in self.objectsToDelete) { 
      [DocumentManager deleteImageWithPath:pathImage]; 
     } 
    } 
    [self activityDidFinish:YES]; 
} 

Файлы фактически удалены. Но проблема в том, что я хотел бы назвать [self.collectionView reloadData] в моем FilesCollectionController сразу после UIActivity сделал отделка, и поэтому мой взгляд коллекция будет обновляться сразу ...

+0

Что такое 'UIActivity'? Вы имеете в виду 'UIAlertView'? – rmaddy

+0

@rmaddy Мы можем сказать, что UIActivity заканчивается после нажатия пользователем одной кнопки UIAlertView – EricBncci

ответ

0

Ну, я нашел способ его достижения:

ActivityTrash.h

@class FilesCollectionController; 
@interface ActivityTrash : UIActivity { 
    FilesCollectionController *collectionVC; 
} 

@property(nonatomic,retain) NSMutableArray *objectsToDelete; 

- (id)initFromViewController:(FilesCollectionController *)vc; 

@end 

ActivityTrash.m

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    // If the user pressed ok 
    if (buttonIndex == 1) { 
     for (NSString *pathImage in self.objectsToDelete) { 
      [DocumentManager deleteImageWithPath:pathImage]; 
     } 
    } 

    [collectionVC viewWillAppear:YES]; 
    [self activityDidFinish:YES]; 
} 

FilesCollectionController.m

ActivityTrash *trash = [[ActivityTrash alloc] initFromViewController:self]; 

не может быть лучшим решением, но это работает.

Смежные вопросы