2012-05-09 2 views
0

UILongPressGestureRecognizer добавлен в мое изображениеView с действием handleLongPressOnPhotos. Наиболее связанные коды выглядит следующим образом:Невозможно отклонить лист действий здесь

- (IBAction)handleLongPressOnPhotos:(UILongPressGestureRecognizer *)sender 
{ 
self.imageWillBeSaved = (UIImageView *)sender.view; //breakPoint1 
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Save the photo" otherButtonTitles: @"Go to the Original photo", nil]; 
actionSheet.actionSheetStyle = UIActionSheetStyleDefault; 
[actionSheet showInView:self.view]; //breakPoint2 
NSLog(@"actionSheet addr when created is %p", actionSheet);//breakPoint3 
[actionSheet release];//breakPoint4 
} 

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    switch (buttonIndex) { 
     case 0: 
      UIImageWriteToSavedPhotosAlbum(self.imageWillBeSaved.image, self, @selector(image: didFinishSavingWithError:contextInfo:), nil); 
      //[actionSheet dismissWithClickedButtonIndex:0 animated:YES]; i have tried to use this method here, but it didn't work. 
      break; 

     default: 
      break; 
    } 
} 

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo 
{ 
    if (error != NULL) 
    { 
     // handle error 
    } 
    else 
    { 
     // handle ok status 
    } 
} 

Действие листа не будет уволен после того, как я нажмите «сохранить фото» кнопку. Если я снова нажму кнопку, лист действия отклонится, и фотография будет сохранена дважды. Любая проблема в коде? Заранее спасибо!

Ps. imageView является подвидью scrollView, а scrollView находится в таблицеViewCell.

- (IBAction)handleLongPressOnPhotos:(UILongPressGestureRecognizer *)sender 
{ 
self.imageWillBeSaved = (UIImageView *)sender.view; //breakPoint1 
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Save the photo" otherButtonTitles: @"Go to the Original photo", nil]; 
actionSheet.actionSheetStyle = UIActionSheetStyleDefault; 
[actionSheet showInView:self.view]; //breakPoint2 
NSLog(@"actionSheet addr when created is %p", actionSheet);//breakPoint3 
[actionSheet release];//breakPoint4 
} 

Я установил две точки останова в "handleLongPressOnPhotos:" метод как breakPoint1 и breakPoint1. Я выполнил шаги кода после того, как imageView был longPressed. Порядок шагов: breakPoint1 -> breakPoint2 -> breakPoint1 -> breakPoint2 -> breakPoint3 -> breakPoint4 -> breakPoint3 -> breakPoint4, затем вышел. Очевидно, что ActionSheet был представлен дважды, что вызывает проблему. Это странно, и я не знаю причины и избегаю этого.

Проблема решена в другом вопросеUILongPressGestureRecognizer gets called twice when pressing down

благодаря @Laddu, @MichaelDautermann, @sreecharan

+0

вы добавили "' '" в .h интерфейса файла независимо от контроллера вида (или где-либо), из которого вызывается этот код? Что происходит, когда вы устанавливаете точку останова на строке '' switch (buttonIndex) '? Он попадает каждый раз или в другое время? –

+0

Да, я добавлю "в файл интерфейса .h. Он ударяется каждый раз. –

+0

точка останова ударяет каждый раз, когда вы нажимаете кнопку« сохранить фотографию » –

ответ

0

Проблема решена в другой вопрос UILongPressGestureRecognizer вызывается дважды при нажатии вниз

благодаря @Laddu, @MichaelDautermann, @sreecharan

1

это выглядит хорошо, но добавьте NSLog здесь: -

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ 

    NSLog(@"buttonIndex.....%d",buttonIndex); 

    switch (buttonIndex) { 

    case 0: 
     UIImageWriteToSavedPhotosAlbum(self.imageWillBeSaved.image, self, @selector(image: didFinishSavingWithError:contextInfo:), nil); 

     //[actionSheet dismissWithClickedButtonIndex:0 animated:YES]; i have tried to use this method here, but it didn't work. 

     break; 

    default: 
     break; 
    } 
} 

Проверить добавления ACTIONSheet Делегат в файле .h также.

+0

NSLog (@" buttonIndex .....% d ", buttonIndex); отлично работает. проверить делегата? –

+0

plz проверить .h также вы добавляете делегат ActionSheet – Destroyer

+0

ofcoz я его добавлю –

0

есть причина, по которой вы не используете actionSheet:willDismissWithButtonIndex: вместо actionSheet:clickedButtonAtIndex:.

Если вы используете actionSheet:willDismissWithButtonIndex:, вам не нужно заботиться об увольнении ActionSheet самостоятельно.

+0

Да, я пробовал этот метод, но проблема все еще там. –

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