Ryan Bobrowski
Ryan Bobrowski

Reputation: 2730

iOS modal overlay menu

enter image description here

I was wondering if there were a built-in view in XCode for displaying pop-up menus like this for iOS apps? Something like an alert, except with just a set of vertically-stacked buttons?

EDIT:

I knew about UIAlertController, just not that its buttons stack vertically after you add more than 2, which is the style I was going for. Just to clear, for just buttons set title and message to nil as well.

Upvotes: 2

Views: 2989

Answers (4)

Kirti Parghi
Kirti Parghi

Reputation: 1152

Yes, UIAlertController is provided for setting other controls on alert view.

UIAlertController * alert=   [UIAlertController
                              alertControllerWithTitle:@"My Title"
                              message:@"Enter User Credentials"
                              preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                           handler:^(UIAlertAction * action) {
                                               //Do Some action here

                                           }];
UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault
                                               handler:^(UIAlertAction * action) {
                                                   [alert dismissViewControllerAnimated:YES completion:nil];
                                               }];

[alert addAction:ok];
[alert addAction:cancel];

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
    textField.placeholder = @"Username";
}];
[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
    textField.placeholder = @"Password";
    textField.secureTextEntry = YES;
}];

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

Upvotes: 2

Alberto Mier
Alberto Mier

Reputation: 204

@Richa solution but in swift version

let alertController = UIAlertController(title: "", message: "", preferredStyle: .alert)
    let searchAction = UIAlertAction(title: NSLocalizedString("Search for an image", comment: "search action"), style: .default, handler: {(action: UIAlertAction) -> Void in
        //Add your code
    })
    let choosePhotoAction = UIAlertAction(title: NSLocalizedString("Choose Photo", comment: "choosePhoto action"), style: .default, handler: {(action: UIAlertAction) -> Void in
        //Your code
    })
    let takePhotoAction = UIAlertAction(title: NSLocalizedString("Take Photo", comment: "takePhoto action"), style: .default, handler: {(action: UIAlertAction) -> Void in
        //Your code
    })
    let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: "cancel action"), style: .default, handler: {(action: UIAlertAction) -> Void in
        print("cancel action")
    })
    alertController.addAction(searchAction)
    alertController.addAction(choosePhotoAction)
    alertController.addAction(takePhotoAction)
    alertController.addAction(cancelAction)
    self.present(alertController, animated: true, completion: nil)

Upvotes: 1

Richa
Richa

Reputation: 238

You can use an UIAlertController

UIAlertController *alertController = [UIAlertController
                                      alertControllerWithTitle:@""
                                      message:@"" preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *searchAction = [UIAlertAction
                           actionWithTitle:NSLocalizedString(@"Search for an image", @"search action")
                           style:UIAlertActionStyleDefault
                           handler:^(UIAlertAction *action)
                           {
                               //Add your code                                 
                           }];

UIAlertAction *choosePhotoAction = [UIAlertAction
                            actionWithTitle:NSLocalizedString(@"Choose Photo", @"choosePhoto action")
                            style:UIAlertActionStyleDefault
                            handler:^(UIAlertAction *action)
                            {
                               //Your code
                            }];

UIAlertAction *takePhotoAction = [UIAlertAction
                            actionWithTitle:NSLocalizedString(@"Take Photo", @"takePhoto action")
                            style:UIAlertActionStyleDefault
                            handler:^(UIAlertAction *action)
                            {
                               //Your code
                            }];

UIAlertAction *cancelAction = [UIAlertAction
                                  actionWithTitle:NSLocalizedString(@"Cancel", @"cancel action")
                                  style:UIAlertActionStyleDefault
                                  handler:^(UIAlertAction *action)
                                  {
                                      NSLog(@"cancel action");

                                  }];

[alertController addAction:searchAction];
[alertController addAction:choosePhotoAction];
[alertController addAction:takePhotoAction];
[alertController addAction:cancelAction];
[self presentViewController:alertController animated:YES completion:nil];

Upvotes: 2

user4151918
user4151918

Reputation:

Yes. It's called a UIAlertController

Upvotes: 3

Related Questions