UIActionSheet: обрабатывать вызов методов в правильной хронологии - PullRequest
0 голосов
/ 02 декабря 2011

Контекст В моем приложении есть два UIBarButtonItems.Если я нажму на первую кнопку, называемую кнопкой сохранения, появится UIActionSheet и попросит меня сохранить.Когда я принимаю процесс сохранения, фактическое изображение должно быть сохранено в библиотеке.

Когда я нажимаю на вторую кнопку, называемую delete-button, должен запускаться тот же запрос через UIActionSheet.После принятия операции изображение должно быть удалено.

Для этого у меня есть два метода IBAction и один для UIActionSheet.

Реализация методов

-(IBAction)save: (id) sender{
UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle: @"Sure to save?"delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: @"Save",@"Cancel",nil];
    actionSheet.tag = 100;
    [actionSheet showInView:self.view];
    [actionSheet release];
}
-(IBAction)bin: (id) sender{
UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@"Sure to delete?"delegate: self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Delete",@"Cancel",nil];
    actionSheet.tag = 101;
    [actionSheet showInView:self.view];
    [actionSheet release];
}

В связи с тем, что "willPresentActionSheet" не может быть реализован в классе два раза, я использую теги для обработки кнопки сохранения и удаления.

-(void)willPresentActionSheet:(UIActionSheet*)actionSheet{
   if (actionSheet.tag == 100) {
        CGRect contextRect  = CGRectMake(0, 960, 768, 1004);
        UIGraphicsBeginImageContext(contextRect.size);  

    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image1 = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(image1, nil, nil, nil);

} else if (actionSheet.tag == 101) {
    imageView.image = nil; 

    NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Default.png"];  
        [imageView setImage:[UIImage imageWithContentsOfFile:filePath]];
    } 
}

Проблема Когда я нажимаю кнопку удаления, появляется actionSheet, но в то же время (до того, как я разрешу удалить) изображение еще удаляется.

Что не так или что я упустил в моих методах?Если нет ясности относительно моего приложения или моей проблемы, не стесняйтесь спрашивать.

Заранее благодарю за помощь

1 Ответ

0 голосов
/ 02 декабря 2011

Звучит так, будто вы пытаетесь обработать действие после того, как пользователь нажмет одну из кнопок выбора на листе действий.Однако функция willPresentActionSheet будет вызываться еще до того, как лист действий будет представлен.Если вы пытаетесь удалить изображение только после того, как пользователь щелкнул его, чтобы подтвердить его на листе действий, взгляните на функцию - clickedButtonAtIndex в UIActionSheetDelegate.

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

Обязательно назначьте делегатаUIActionSheet к классу, который обрабатывает функции обратного вызова листа действия (наиболее вероятно - «self», как вы показали его выше).

В обработчике clickedButtonAtIndex вы все равно можете использовать тег для дифференциации UIActionSheets и использованияиндекс кнопки, чтобы определить, на какую кнопку нажали.

...