简体   繁体   English

取消按钮在UIImagePickerView中不起作用

[英]Cancel button not working in UIImagePickerView

I am use UIImagePickerView in my code in which three buttons are there. 我在代码中使用UIImagePickerView ,其中有三个按钮。 One to take photo, second to choose photo and third to cancel. 一个拍照,第二个选择照片,第三个取消。 The code as below: 代码如下:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select the operation to proceed?"
                                                                 delegate:self
                                                        cancelButtonTitle:@"Cancel"
                                                   destructiveButtonTitle:nil
                                                        otherButtonTitles:@"Take Photo", @"Select Photo", nil];
        [actionSheet showInView:self.view];

When I click on the Cancel button it does not work. 当我单击“取消”按钮时,它不起作用。

I am using UIImagePickerViewDelegate method as below. 我正在使用UIImagePickerViewDelegate方法,如下所示。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    @try {
        //set selected image in imageview by imagepickerview

    UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
    imgProfilePic.image = chosenImage;

    [picker dismissViewControllerAnimated:YES completion:nil];
    }
    @catch (NSException *exception) {
        NSLog(@"%@",exception.description);
    }
}

//- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
//{
//    NSLog(@"@@@@");
//    [picker dismissViewControllerAnimated:YES completion:NULL];
//}

Please check my code for UIImagePickerView and provide me guidance for correct code. 请检查我的UIImagePickerView代码,并为我提供正确代码的指导。

#pragma mark - Actionssheet delegate method for Image

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

    if(buttonIndex != 3)
    {

        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;
        picker.allowsEditing = YES;

        if(buttonIndex == 0)
        {
            NSLog(@"Choose Photo from Camera");

            //simulator has no camera so app will crash, below call just provide the alert that device has no camera.
            if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

                UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                      message:@"Device has no camera"
                                                                     delegate:nil
                                                            cancelButtonTitle:@"OK"
                                                            otherButtonTitles: nil];

                [myAlertView show];

            }
            else
            {
                picker.sourceType = UIImagePickerControllerSourceTypeCamera;
            }
        }
        if(buttonIndex == 1)
        {
            NSLog(@"Choose Photo from Gallary");
            picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

        }

//        if (buttonIndex == 3)
//        {
//            NSLog(@"###");
//        }
//        
//        else
//        {
//            NSLog(@"Cancel the tab");
//            [picker dismissViewControllerAnimated:YES completion:NULL];
//
//        }
        [self presentViewController:picker animated:YES completion:nil];


    }
    }
    @catch (NSException *exception) {
        NSLog(@"%@",exception.description);

    }
}

I think you are new for the stackOverflow and iOS application Development. 我认为您是StackOverflow和iOS应用程序开发的新手。 That UIActionsheet and UIImagePickerController both are different things. UIActionsheetUIImagePickerController都是不同的东西。 So if you are create a actiohsheet like: 因此,如果您要创建一个活动表,例如:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select the operation to proceed?"delegate:self
         cancelButtonTitle:@"Cancel"
         destructiveButtonTitle:nil otherButtonTitles:@"Take Photo", @"Select Photo", nil];
        [actionSheet showInView:self.view];

Now you can called its button method like following: 现在,您可以按以下方式调用其按钮方法:

   -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        if (buttonIndex==0)
            {
                   // take photo selected
            }
            else if (buttonIndex==1)
            {
                   // select photo selected
            }
            else
            {
                  // cancel button selected
            }
     }

You can also use UIAlertController that is the replacement of UIAlert and UIActionSheet from iOS8 so you can use like following: 您还可以使用UIAlertController替代UIAlertUIActionSheet ,因此可以像以下方式使用:

UIAlertController* AlertSheet = [UIAlertController alertControllerWithTitle:@"New ActionSheet" message:nil preferredStyle:UIAlertControllerStyleActionSheet];

UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"Action" style:UIAlertActionStyleDefault //
                                                      handler:^(UIAlertAction * action) {
                                                          NSLog(@"Action");
                                                      }];
[AlertSheet addAction:defaultAction];

UIAlertAction *cancleAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {

}];
[AlertSheet addAction:cancleAction];
[self presentViewController:AlertSheet animated:YES completion:nil];

You can try this code its work for me 您可以尝试此代码为我工作

UIAlertController* alert = [UIAlertController
                            alertControllerWithTitle:nil      //  Must be "nil", otherwise a blank title area will appear above our two buttons
                            message:nil
                            preferredStyle:UIAlertControllerStyleActionSheet];

UIAlertAction* button0 = [UIAlertAction
                          actionWithTitle:@"Cancel"
                          style:UIAlertActionStyleCancel
                          handler:^(UIAlertAction * action)
                          {
                              //  UIAlertController will automatically dismiss the view
                          }];

UIAlertAction* button1 = [UIAlertAction
                          actionWithTitle:@"Take photo"
                          style:UIAlertActionStyleDefault
                          handler:^(UIAlertAction * action)
                          {
                              //  The user tapped on "Take a photo"
                              UIImagePickerController *picker = [[UIImagePickerController alloc] init];
                              picker.delegate = self;
                              picker.allowsEditing = YES;
                              picker.sourceType = UIImagePickerControllerSourceTypeCamera;

                              [self presentViewController:picker animated:YES completion:NULL];                              }];

UIAlertAction* button2 = [UIAlertAction
                          actionWithTitle:@"Choose Existing"
                          style:UIAlertActionStyleDefault
                          handler:^(UIAlertAction * action)
                          {
                              //  The user tapped on "Choose existing"
                              UIImagePickerController *picker = [[UIImagePickerController alloc] init];
                              picker.delegate = self;
                              picker.allowsEditing = YES;
                              picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

                              [self presentViewController:picker animated:YES completion:NULL];
                          }];

[alert addAction:button0];
[alert addAction:button1];
[alert addAction:button2];
[self presentViewController:alert animated:YES completion:nil];

UIActionSheet is deprecated since iSO 8. You should use UIAlertController 从iSO 8开始不推荐使用UIActionSheet。您应该使用UIAlertController

UIAlertController* alert = [UIAlertController
                            alertControllerWithTitle:nil      //  Must be "nil", otherwise a blank title area will appear above our two buttons
                            message:nil
                            preferredStyle:UIAlertControllerStyleActionSheet];

UIAlertAction* button0 = [UIAlertAction
                          actionWithTitle:@"Cancel"
                          style:UIAlertActionStyleCancel
                          handler:^(UIAlertAction * action)
                          {
                                //  UIAlertController will automatically dismiss the view
                          }];

UIAlertAction* button1 = [UIAlertAction
                          actionWithTitle:@"Take photo"
                          style:UIAlertActionStyleDefault
                          handler:^(UIAlertAction * action)
                          {
                              //  The user tapped on "Take a photo"
                              UIImagePickerController *imagePickerController= [[UIImagePickerController alloc] init];
                              imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
                              imagePickerController.delegate = self;
                              [self presentViewController:imagePickerController animated:YES completion:^{}];
                          }];

UIAlertAction* button2 = [UIAlertAction
                         actionWithTitle:@"Select Photo"
                         style:UIAlertActionStyleDefault
                         handler:^(UIAlertAction * action)
                         {
                             //  The user tapped on "Select Photo"
                             UIImagePickerController *imagePickerController= [[UIImagePickerController alloc] init];
                             imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
                             imagePickerController.delegate = self;
                             [self presentViewController:imagePickerController animated:YES completion:^{}];
                         }];

[alert addAction:button0];
[alert addAction:button1];
[alert addAction:button2];
[self presentViewController:alert animated:YES completion:nil];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM