UICollectionView
で選択した複数のオブジェクトを自分の から削除しようとすると問題が発生します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
呼び出したいため、コレクション ビューがすぐに更新されることです...