I’m displaying an UIActionSheet on the iPad this way:
_actionSheet = [[UIActionSheet alloc] initWithTitle:@"Choose action"
delegate:(id<UIActionSheetDelegate>)self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
if (special_case) {
_actionSheet.destructiveButtonIndex = [_actionSheet addButtonWithTitle:@"Discard Action"];
}
[_actionSheet addButtonWithTitle:@"Action One"];
[_actionSheet addButtonWithTitle:@"Action Two"];
_actionSheet.cancelButtonIndex = [_actionSheet addButtonWithTitle:@"Cancel"];
[_actionSheet showFromBarButtonItem:self.myActionButton animated:YES];
While both cancelButtonIndex and destructiveButtonIndex work fine, the weird thing is that in actionSheet:didDismissWithButtonIndex: I’m getting firstOtherButtonIndex set to -1, which is obviously wrong because my Action One button has an index of 1, while Action Two has an index of 2.
Obviously the whole point of the above is to only display the destructive button only in a special case (otherwise I would have passed all titles in the init call and probably things would have been sweet).
What am I missing?
firstOtherButtonIndexis probably set only in theinitWithTitlemethod. You have to set it manually if you are adding buttons manually. The problem can be also caused by the fact that you are adding the cancel button after adding the other buttons. Normally the indices of destructive and cancel buttons are lower thanfirstOtherButtonIndex.What about doing it the easy way?