0

我在尝试UICollectionView从我自己的UIActivity.

文件集合控制器.h

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

此集合视图使用文件路径来显示图像。

文件集合控制器.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]我的FilesCollectionControllerUIActivity,所以我的集合视图会立即更新......

4

1 回答 1

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

文件集合控制器.m

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

可能不是最好的解决方案,但它有效。

于 2015-03-25T13:07:58.537 回答