2012-04-04 2 views
0

Я работаю над приложением, которое ведет себя как фотогалерея, и я реализую возможность, чтобы пользователь удалял фотографии из своей галереи. Для этого я решил разместить невидимую кнопку над каждой картинкой. Когда пользователь нажимает кнопку «Изменить», кнопки скрытого удаления по каждому изображению становятся активными. Я использую один и тот же IBOutlet по каждой из скрытых кнопок для простоты, и я соответствующим образом пометил каждую кнопку в Interface Builder. Когда пользователь нажимает кнопку над изображением, появляется предупреждение, спрашивающее, действительно ли они хотят его удалить. Если они нажмут да, я вызываю removeObjectAtIndex. Вот код, я использую:Удаление изображения из пользовательского интерфейса

- (IBAction)deleteButtonPressed:(id)sender { 
    NSLog(@"Sender is %@", sender); 
    UIAlertView *deleteAlertView = [[UIAlertView alloc] initWithTitle:@"Delete" 
                   message:@"Are you sure you want to delete this photo?" 
                  delegate:self 
                cancelButtonTitle:@"No" 
                otherButtonTitles:@"Yes", nil]; 
    [deleteAlertView show]; 
    int imageIndex = ((UIButton *)sender).tag; 
    deleteAlertView.tag = imageIndex; 

} 

- (void)alertView: (UIAlertView *) alertView 
clickedButtonAtIndex: (NSInteger) buttonIndex 
{ 


    if (buttonIndex != [alertView cancelButtonIndex]) { 
     NSLog(@"User Clicked Yes. Deleting index %d of %d", alertView.tag, [array count]); 

     [self.array removeObjectAtIndex: alertView.tag]; 
     NSLog(@"After deleting item, array count = %d", [array count]); 
     alertView.tag.image = nil; 
    } 

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

Вопрос здесь alertView.tag.image. У меня есть сообщение об ошибке «Member reference base type NSInteger (aka int) не является структурой или объединением. Этот код просто удаляет изображение из массива, но мне все равно нужно удалить изображение из пользовательского интерфейса. что alertView.tag.image сделал бы трюк. Я понятия не имею, как это сделать, я все еще новичок в Objective-C, и прочитанная мной книга вообще не касается этого. Мне также интересно, как я могу обновить интерфейс ? после удаления изображения

ответ

1

тег только NSInteger. У него нет свойства, называемого изображением. Вы должны использовать,

((UIImageView *)[self.view viewWithTag:alertView.tag]).image =nil; 
+0

Большое спасибо за ваш ответ, хотя, когда я добавляю в этот код, Xcode утверждает, что «Свойство' image' не найдено на объекте типа 'UIView *'. – John

+1

отсылает его (UIImageView *). Позвольте мне его отредактировать – Vignesh

+0

Awesome, спасибо за вашу помощь! – John

1

Вы пытаетесь получить доступ к свойству, которое не существует:

alertView.tag.image = nil;

Ваш alertView является UIAlertView - и т он tag - целочисленное свойство, которое представляет значение int, которое вы назначили представлению (при условии, что вы это сделали). tag - просто простой старый int - это примитив.

Что вам нужно сделать, так это взять значение тега и вызвать viewWithTag в надведении, в котором хранятся ваши изображения: это даст вам ссылку на изображение, которое вы можете затем указать removeFromSuperview по мере необходимости.

+0

Прохладный спасибо. Будет ли это выглядеть как '[alertView.tag removeFromSuperview];'? Извините за новички. – John

+0

Нет - это будет '[[self.view viewWithTag: alertView.tag] removeFromSuperview]', * предполагая, что ваши изображения добавлены в 'self.view'. Но похоже, что вы могли бы более подробно изучить некоторые документы Apple, особенно по поводу того, как работает иерархия представлений. У них есть отличный образец кода, это стоит проверить. – lxt

0

Как добавить изображение в интерфейс? Установите изображение в UIImageView на другое изображение или удалите его из представления.

Вы не можете добавить .image после .tag. Тег - это целое поле экземпляра, используемое для обозначения одного представления от другого (среди прочего). Сам тег не имеет никаких свойств, кроме его значения.

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