Creating UIActionSheet [duplicate]
Asked Answered
I

4

58

I would like to create this kind of menu, of course with other menu buttons. Is there any default viewcontroller representing it, or do I have to get images and create this by myself.

enter image description here

Izzy answered 20/6, 2013 at 20:30 Comment(3)
The title and popularity of this question is much better than the duplicate. It would be nice to have this question reopened so that updated answers could be added.Earlineearls
Vote to reopen please.Panchito
@Earlineearls you are right. it is more helpful and understandable than other linksCryostat
F
169

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 for iOS 8.x https://developer.apple.com/documentation/uikit/uialertcontroller#//apple_ref/occ/cl/UIAlertController

Forgiveness answered 20/6, 2013 at 20:34 Comment(7)
+! for being the only one to call it a UIActionSheet (as well as providing a good answer).Typewriting
I was literally working on my app as I saw the question! It comes from my code verbatim ;)Forgiveness
it is also working without adding UIActionSheetDelegate .. I want to know how...Knightly
with iOS 8 there is a new UIAlertController developer.apple.com/library/ios/documentation/uikit/reference/…Forgiveness
re the Sep 24, '14 comment and edit, there is a new UIAlertController and UIActionSheet is deprecated as of iOS 8, but to say that it has "changed" is not fully accurate. It might be better to include the link to the class reference but say that it is deprecated rather than changed.Paluas
NOTE: [popup showInView:[UIApplication sharedApplication].keyWindow]; does not work alot of the time on iPad apps, show it in your current UIView instead.Rossman
@AlbertRenshaw you are correct. You can use self or comparable and show in current view.Forgiveness
V
11

Take a look at the UIActionSheet documentation.

NSString *actionSheetTitle = @"Action Sheet Demo"; //Action Sheet Title
NSString *destructiveTitle = @"Destructive Button"; //Action Sheet Button Titles
NSString *other1 = @"Other Button 1";
NSString *other2 = @"Other Button 2";
NSString *other3 = @"Other Button 3";
NSString *cancelTitle = @"Cancel Button";
UIActionSheet *actionSheet = [[UIActionSheet alloc]
                              initWithTitle:actionSheetTitle
                              delegate:self
                              cancelButtonTitle:cancelTitle
                              destructiveButtonTitle:destructiveTitle
                              otherButtonTitles:other1, other2, other3, nil];
[actionSheet showInView:self.view];
Vanitavanity answered 20/6, 2013 at 20:32 Comment(0)
E
5

It is called an UIActionSheet: You create one like so:

    NSString *actionSheetTitle = @"Action Sheet Demo"; //Action Sheet Title
NSString *destructiveTitle = @"Destructive Button"; //Action Sheet Button Titles
NSString *other1 = @"Other Button 1";
NSString *other2 = @"Other Button 2";
NSString *other3 = @"Other Button 3";
NSString *cancelTitle = @"Cancel Button";
UIActionSheet *actionSheet = [[UIActionSheet alloc]
                              initWithTitle:actionSheetTitle
                              delegate:self
                              cancelButtonTitle:cancelTitle
                              destructiveButtonTitle:destructiveTitle
                              otherButtonTitles:other1, other2, other3, nil];
[actionSheet showInView:self.view];

Implement the UISctionSheetDelegate to respond to button action.

Take a look at this tutorial for more info: http://mobile.tutsplus.com/tutorials/iphone/uiactionsheet_uiactionsheetdelegate (Code is from this tutorial)

Enneastyle answered 20/6, 2013 at 20:34 Comment(0)
T
3

What you are looking for is called an actionsheet. Read more about it here http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIActionSheet_Class/Reference/Reference.html

Tisatisane answered 20/6, 2013 at 20:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.