Thursday, March 8, 2012

Create UIActionSheet "otherButtons" by passing in array, not varlist


I have an array of strings that I want to use for button titles on a UIActionSheet. Unfortunately, the otherButtonTitles: argument in the method invocation takes a variable length list of strings, not an array.



So how I can I pass these titles into the UIActionSheet? The workaround I've seen suggested is to pass nil into otherButtonTitles:, then specify the button titles individually by using addButtonWithTitle:. But this has the problem of moving the "Cancel" button to the first position on the UIActionSheet rather than the last; I want it to be the last one.



Is there a way to 1) pass an array in lieu of a variable list of strings, or alternatively 2) move the cancel button to the bottom of the UIActionSheet?



Thanks.

2 comments:

  1. I got this to work (you just need to, be ok with a regular button, and just add it after :

    NSArray *array = [[NSArray alloc] initWithObjects:
    [NSString stringWithString:@"1st Button"],
    [NSString stringWithString:@"2nd Button"],
    [NSString stringWithString:@"3rd Button"],
    [NSString stringWithString:@"4th Button"],
    nil];

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title Here"
    delegate:self
    cancelButtonTitle:nil
    destructiveButtonTitle:nil
    otherButtonTitles:nil];

    for (int i = 0; i < 3; i++) {

    [actionSheet addButtonWithTitle:[array objectAtIndex:i]];

    }

    [actionSheet addButtonWithTitle:@"Cancel"];
    actionSheet.cancelButtonIndex = 4;

    [actionSheet showInView:self.view];

    ReplyDelete
  2. One little note: [actionSheet addButtonWithTitle:] returns the index of that button, so to be safe and "clean" you can do this:

    actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];

    ReplyDelete