Search code examples
iosiphoneuialertviewuiactionsheet

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.


Solution

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

    NSArray *array = @[@"1st Button",@"2nd Button",@"3rd Button",@"4th Button"];
    
        UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title Here"
                                                                 delegate:self
                                                        cancelButtonTitle:nil
                                                   destructiveButtonTitle:nil
                                                        otherButtonTitles:nil];
    
        // ObjC Fast Enumeration
        for (NSString *title in array) {
            [actionSheet addButtonWithTitle:title];
        }
    
        actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];
    
        [actionSheet showInView:self.view];