2012-04-02 2 views
0

У меня есть приложение, которое ведет себя как фотогалерея. Они выбирают изображение из рулона камеры, и изображение отображается в UIImageView. У меня есть всего 9 изображений. Теперь я пытаюсь добавить возможность нажатия кнопки редактирования и разрешить пользователю удалять фотографии. Я сделал это, поместив скрытый UIButton над каждым изображением, и когда кнопка нажата, появится UIAlertView, спрашивающий, хотят ли они удалить это изображение. После того, как они нажимают «Да» в UIAlertView, я хотел бы, чтобы этот конкретный UIImageView переставал отображать изображение и перемещал каждую отображаемую картинку 1 строку влево, чтобы в галерее не было свободного места.iOS: Перемещение объектов в NSMutableArray

Это то, что для меня становится сложным, я все еще очень новичок в Objective-C и понятия не имею, как это сделать. Я знаю, что мне, вероятно, следует называть moveRowAtIndexPath и toIndexPath, но я не уверен, должен ли я делать это в viewDidLoad, viewWillAppear, или мне просто нужно создать свой собственный метод для этого? Вот пример того, что я работаю с, которые могут или не могут быть актуальны:

- (void)applicationDidEnterBackground:(UIApplication*)application { 
    NSLog(@"Image on didenterbackground: %@", imageView); 
    NSMutableArray* array = [NSMutableArray arrayWithObject:[NSData dataWithData:UIImagePNGRepresentation(imageView.image)]]; 

    [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView2.image)]]; 
    [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView3.image)]]; 
     [array addObject:[NSData dataWithData:UIImagePNGRepresentation(imageView4.image)]]; 

      [self.user setObject:array forKey:@"images"]; 
    [user synchronize]; 

      } 

- (void)viewDidLoad 
    { 
     self.user = [NSUserDefaults standardUserDefaults]; 
     NSLog(@"It is %@", self.user); 
     NSMutableArray* array = [[self.user objectForKey:@"images"]mutableCopy]; 
     imageView.image = [[UIImage alloc] initWithData:[array objectAtIndex:0]]; 
     imageView2.image = [[UIImage alloc] initWithData:[array objectAtIndex:1]]; 
     imageView3.image = [[UIImage alloc] initWithData:[array objectAtIndex:2]]; 
     imageView4.image = [[UIImage alloc] initWithData:[array objectAtIndex:3]]; 



     UIApplication *app = [UIApplication sharedApplication]; 
     [[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(applicationDidEnterBackground:) 
                name:UIApplicationDidEnterBackgroundNotification 
                object:app]; 

     backToGalleryButton.hidden = YES; 
     tapToDeleteLabel.hidden = YES; 
     deleteButton1.hidden = YES; 
     [super viewDidLoad]; 

    } 

Любая помощь или совет по этому вопросу очень ценится, спасибо!

+0

Представлены ли эти изображения в виде таблицы? –

+0

Нет, я не, я должен был, но я слишком далеко в этом тоже повернулся. Я при необходимости, хотя. – John

ответ

2

Почему вы не просто удаляете объект из массива, если это функция удаления? removeObject или removeObjectAtIndex отлично справится с этой задачей. Если вы используете табличное представление, тогда вызовите reloadData на него далее.

+0

Прохладный спасибо, я знал, что я должен использовать TableView вместо этого. Есть ли простой способ добавить все это в табличное представление, или я уже слишком глубоко? И если я в конечном итоге сохраняю то, что у меня есть, и используя 'removeObjectAtIndex', есть ли вызов для перезагрузки данных, чтобы он не оставил пустое пространство в галерее? Извините за новички, я все еще очень новичок в этом. – John

+1

Ах! Я думал, это может быть так. Вы беспокоитесь, что NSMutableArray будет вести себя как новый массив стиля Java, я думаю. Вы думаете, что если вы удалите его, в вашем массиве будет пустое пространство. Однако, это не так. NSArray не может содержать nil как объект, потому что он заканчивается на nil, поэтому внутри NSMutableArray будет перемещать задний конец вашего массива при удалении элемента. Спокойно, а? : D – borrrden

+1

Кроме того, ничто не заставляет вас использовать представление таблицы. Мы просто предположили, что вы были из-за того, что вы написали (IndexPath - это объект, обычно используемый в UITableView, и обычно никогда не в NSArray) – borrrden

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