当我点击一个按钮时创建动作,而不是UIAlertcontroller

时间:2021-08-17 21:16:26

i Create two buttons of UIAlertcontroller:

我创建了UIAlertcontroller的两个按钮:

One Button - "OpenCamera"
Two button - "OpenGallery"

I just can not understand how I create action when I click on one of them.

我只是不明白当我点击其中一个动作时我是如何创建动作的。

- (IBAction)takePic:(id)sender {


UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
                                                               message:nil
                                                        preferredStyle:UIAlertControllerStyleActionSheet]; // 1
UIAlertAction *openCamrea = [UIAlertAction actionWithTitle:@"open camrea"
                                                      style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
                                                      }];
UIAlertAction *openGallery = [UIAlertAction actionWithTitle:@"open gallery"
                                                       style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
                                                       }];

[alert addAction:openCamrea];
[alert addAction:openGallery];

[self presentViewController:alert animated:YES completion:nil];
}

3 个解决方案

#1


5  

The handler is the block to be executed on the selection of the item.

处理程序是在选择项目时要执行的块。

UIAlertAction *openGallery = [UIAlertAction
    actionWithTitle:@"open gallery"
    style:UIAlertActionStyleDefault
    handler:^(UIAlertAction * action) {
        // Code to run when the open gallery option is pressed.
    }];

BTW I think the long unbroken lines in the question really don't help as they effectively hide the key parameter.

顺便说一句,我认为这个问题中长长的不间断线真的没有帮助,因为它们有效地隐藏了关键参数。

#2


1  

The complete code:

完整的代码:

- (IBAction)takePic:(id)sender {


  UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
                                                               message:nil
                                                        preferredStyle:UIAlertControllerStyleActionSheet];

  UIAlertAction *openCamrea = [UIAlertAction actionWithTitle:@"open camrea"
                                                      style:UIAlertActionStyleDefault handler:^(UIAlertAction * action)
  {
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

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

        [myAlertView show];
    }
    else
    {
       UIImagePickerController *picker = [[UIImagePickerController alloc] init];
       picker.delegate = self;
       picker.allowsEditing = YES;
       picker.sourceType = UIImagePickerControllerSourceTypeCamera;

       [self presentViewController:picker animated:YES completion:NULL];
    }
  }];
  UIAlertAction *openGallery = [UIAlertAction actionWithTitle:@"open gallery"
                                                       style:UIAlertActionStyleDefault handler:^(UIAlertAction * action)
  {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

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

  [alert addAction:openCamrea];
  [alert addAction:openGallery];

  [self presentViewController:alert animated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

  UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
  self.img.image = chosenImage;

  [picker dismissViewControllerAnimated:YES completion:NULL];

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

  [picker dismissViewControllerAnimated:YES completion:NULL];

}

#3


0  

Put your code inside the handler blocks you are passing to [UIAlertAction actionWithTitle:style:handler:]

将您的代码放在传递给[UIAlertAction actionWithTitle:style:handler:]的处理程序块中

For example:

例如:

UIAlertAction *openCamrea = [UIAlertAction actionWithTitle:@"open camrea"
                                                      style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {

                                                          // openCamera action code goes here

                                                  }];

UIAlertAction *openGallery = [UIAlertAction actionWithTitle:@"open gallery"
                                                   style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {

                                                       // openGallery action code goes here

                                                   }];

#1


5  

The handler is the block to be executed on the selection of the item.

处理程序是在选择项目时要执行的块。

UIAlertAction *openGallery = [UIAlertAction
    actionWithTitle:@"open gallery"
    style:UIAlertActionStyleDefault
    handler:^(UIAlertAction * action) {
        // Code to run when the open gallery option is pressed.
    }];

BTW I think the long unbroken lines in the question really don't help as they effectively hide the key parameter.

顺便说一句,我认为这个问题中长长的不间断线真的没有帮助,因为它们有效地隐藏了关键参数。

#2


1  

The complete code:

完整的代码:

- (IBAction)takePic:(id)sender {


  UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
                                                               message:nil
                                                        preferredStyle:UIAlertControllerStyleActionSheet];

  UIAlertAction *openCamrea = [UIAlertAction actionWithTitle:@"open camrea"
                                                      style:UIAlertActionStyleDefault handler:^(UIAlertAction * action)
  {
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

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

        [myAlertView show];
    }
    else
    {
       UIImagePickerController *picker = [[UIImagePickerController alloc] init];
       picker.delegate = self;
       picker.allowsEditing = YES;
       picker.sourceType = UIImagePickerControllerSourceTypeCamera;

       [self presentViewController:picker animated:YES completion:NULL];
    }
  }];
  UIAlertAction *openGallery = [UIAlertAction actionWithTitle:@"open gallery"
                                                       style:UIAlertActionStyleDefault handler:^(UIAlertAction * action)
  {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

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

  [alert addAction:openCamrea];
  [alert addAction:openGallery];

  [self presentViewController:alert animated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

  UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
  self.img.image = chosenImage;

  [picker dismissViewControllerAnimated:YES completion:NULL];

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

  [picker dismissViewControllerAnimated:YES completion:NULL];

}

#3


0  

Put your code inside the handler blocks you are passing to [UIAlertAction actionWithTitle:style:handler:]

将您的代码放在传递给[UIAlertAction actionWithTitle:style:handler:]的处理程序块中

For example:

例如:

UIAlertAction *openCamrea = [UIAlertAction actionWithTitle:@"open camrea"
                                                      style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {

                                                          // openCamera action code goes here

                                                  }];

UIAlertAction *openGallery = [UIAlertAction actionWithTitle:@"open gallery"
                                                   style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {

                                                       // openGallery action code goes here

                                                   }];