Wednesday, April 13, 2011

UIActionSheet - Unknown Number Of Buttons, How to know what to call?

Hey guys,

I have a UIActionSheet with an undetermined number of buttons. I'll need to use the delegate method buttonClickedAtIndex: (or something similar) to decide what method to call when the user clicks a button.

The problem is: how do I decide which button is clicked when different buttons will appear at different indexes in different situations?

One solution is to look at the button's title and act on that - but that's ugly, non-localisable and just bad practise.

Any ideas?

From stackoverflow
  • Is this a case where a single controller might show several sheets, but you know which buttons will appear on each sheet? If so, you can use the sheet's tag property to differentiate between them.

    - (IBAction)showEditSheet:(id)sender {
        UIActionSheet * sheet = [[UIActionSheet alloc] initWith...];
        sheet.tag = 1;
        [sheet showInView:self.view];
    }
    - (IBAction)showDeleteSheet:(id)sender {
        UIActionSheet * sheet = [[UIActionSheet alloc] initWith...];
        sheet.tag = 2;
        [sheet showInView:self.view];
    }
    - (void)actionSheet:(UIActionSheet *)actionSheet
      clickedButtonAtIndex:(NSInteger)buttonIndex {
        switch(actionSheet.tag) {
            case 1:
                // This is the edit sheet
                switch(buttonIndex) { ... }
                break;
    
            case 2:
                // This is the delete sheet
                switch(buttonIndex) { ... }
                break;
    
            default:
                NSAssert(NO, @"Unknown action sheet");
        }
    }
    
    Jasarien : iPhone users were given the choice to use the camera or the library. iPod Touch doesn't have a camera. The instead of changing the buttons on the sheet, we decided to just send the ipod user straight to the library without a choice. So only one sheet with static buttons is used. Problem solved.
  • PLEASE don't show people how to [alloc] memory... without ever freeing it.

    Ugh.

    Jasarien : Memory management is beyond the scope of this question...

0 comments:

Post a Comment

Note: Only a member of this blog may post a comment.