Creating iPhone Pop-up Menu Similar to Mail App Menu

后端 未结 7 1315
野趣味
野趣味 2020-12-01 05:52

I\'d like to create a pop-up menu similar to the one found in the mail app when you want to reply to a message. I\'ve seen this in more than one application so I wasn\'t su

相关标签:
7条回答
  • 2020-12-01 06:14

    Check out the UICatalog example on Apple's website. The "Alerts" section has examples of how to use UIActionSheet to accomplish what you're trying to do.

    0 讨论(0)
  • 2020-12-01 06:15

    This is how you'd do it in Objective-C on iOS 8+:

        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Directions"
                                                                               message:@"Select mode of transportation:"
                                                                        preferredStyle:UIAlertControllerStyleActionSheet];
        UIAlertAction *drivingAction = [UIAlertAction actionWithTitle:@"Driving" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            // this block runs when the driving option is selected
        }];
        UIAlertAction *walkingAction = [UIAlertAction actionWithTitle:@"Walking" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            // this block runs when the walking option is selected
        }];
        UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
        [alert addAction:drivingAction];
        [alert addAction:walkingAction];
        [alert addAction:defaultAction];
        [self presentViewController:alert animated:YES completion:nil];
    
    0 讨论(0)
  • 2020-12-01 06:20

    Creating an Action Sheet in Swift

    Code has been tested with Swift 5

    Since iOS 8, UIAlertController combined with UIAlertControllerStyle.ActionSheet is used. UIActionSheet is deprecated.

    Here is the code to produce the Action Sheet in the above image:

    class ViewController: UIViewController {
        
        @IBOutlet weak var showActionSheetButton: UIButton!
        
        @IBAction func showActionSheetButtonTapped(sender: UIButton) {
            
            // Create the action sheet
            let myActionSheet = UIAlertController(title: "Color", message: "What color would you like?", preferredStyle: UIAlertController.Style.actionSheet)
            
            // blue action button
            let blueAction = UIAlertAction(title: "Blue", style: UIAlertAction.Style.default) { (action) in
                print("Blue action button tapped")
            }
            
            // red action button
            let redAction = UIAlertAction(title: "Red", style: UIAlertAction.Style.default) { (action) in
                print("Red action button tapped")
            }
            
            // yellow action button
            let yellowAction = UIAlertAction(title: "Yellow", style: UIAlertAction.Style.default) { (action) in
                print("Yellow action button tapped")
            }
            
            // cancel action button
            let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) { (action) in
                print("Cancel action button tapped")
            }
            
            // add action buttons to action sheet
            myActionSheet.addAction(blueAction)
            myActionSheet.addAction(redAction)
            myActionSheet.addAction(yellowAction)
            myActionSheet.addAction(cancelAction)
            
            // present the action sheet
            self.present(myActionSheet, animated: true, completion: nil)
        }
    }
    

    Still need help? Watch this video tutorial. That's how I learned it.

    • UIActionSheet example in Swift (Contrary to the name, it actually does use the new UIAlertController action sheet rather than UIActionSheet.)
    0 讨论(0)
  • 2020-12-01 06:21

    You need to use a UIActionSheet.

    First you need to add UIActionSheetDelegate to your ViewController .h file.

    Then you can reference an actionsheet with:

      UIActionSheet *popup = [[UIActionSheet alloc] initWithTitle:@"Select Sharing option:" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:
                            @"Share on Facebook",
                            @"Share on Twitter",
                            @"Share via E-mail",
                            @"Save to Camera Roll",
                            @"Rate this App",
                            nil];
       popup.tag = 1;
      [popup showInView:self.view];
    

    Then you have to handle each of the calls.

    - (void)actionSheet:(UIActionSheet *)popup clickedButtonAtIndex:(NSInteger)buttonIndex {
    
      switch (popup.tag) {
        case 1: {
            switch (buttonIndex) {
                case 0:
                    [self FBShare];
                    break;
                case 1:
                    [self TwitterShare];
                    break;
                case 2:
                    [self emailContent];
                    break;
                case 3:
                    [self saveContent];
                    break;
                case 4:
                    [self rateAppYes];
                    break;
                default:
                    break;
            }
            break;
        }
        default:
            break;
     }
    }
    

    This has been deprecated as of iOS 8.x.

    https://developer.apple.com/Library/ios/documentation/UIKit/Reference/UIAlertController_class/index.html

    0 讨论(0)
  • 2020-12-01 06:24

    It is a UIAlertController on iOS 8+, and a UIActionSheet on earlier versions.

    0 讨论(0)
  • 2020-12-01 06:25

    I tried to add ActionSheet on my view. So I've been trying to find perfect solution but some answers made me confused. Because most of questions about Action sheet were written so long time ago.Also it has not been updated. Anyway...I will write old version ActionSheet and updated version ActionSheet. I hope my answer is able to make your brain peaceful.

    ----------Updated Version---------

        UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"Action Sheet" message:@"writeMessageOrsetAsNil" preferredStyle:UIAlertControllerStyleActionSheet];
    
        UIAlertAction* actionSheet01 = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                                   handler:^(UIAlertAction * action) {  NSLog(@"OK click");}];
    
        UIAlertAction* actionSheet02 = [UIAlertAction actionWithTitle:@"No" style:UIAlertActionStyleDefault
                                                                     handler:^(UIAlertAction * action) {NSLog(@"OK click");}];
    
        UIAlertAction* actionSheet03 = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel
                                                                     handler:^(UIAlertAction * action) {
                                                                         NSLog(@"Cancel click");}];
    
        [browserAlertController addAction:actionSheet01];
        [browserAlertController addAction:actionSheet02];
        [browserAlertController addAction:actionSheet03];
    
        [self presentViewController:browserAlertController animated:YES completion:nil];
    

    -------Old Version------

    UIActionSheet *actionSheet= [[UIActionSheet alloc] initWithTitle:@"Select Sharing option:" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@“OK”, @“NO”,@“Cancel”,
                            nil];
      actionSheet.tag = 100;
      [actionSheet showInView:self.view];
    
    - (void)actionSheet:(UIActionSheet *)actionShee clickedButtonAtIndex:(NSInteger)buttonIndex {
    
      if( actionSheet.tag  == 100){
            switch (buttonIndex) {
                case 0:
                    [self doSomething];
                    break;
                case 1:
                    [self doAnything];
                    break;
                case 2:
                    [self doNothing];
                    break;
                 default:
                    break;
            }
            break;
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题