Я прошу прощения, если это спросили, но я не могу найти это нигде. Я даже воссоздал мою проблему в демонстрационном проекте на тот случай, если кто-то из вас захочет увидеть ее из первых рук, хотя я не знаю, где мне ее опубликовать.
У меня есть приложение xibless, основанное на UINavigationController. Некоторые из моих дочерних ViewControllers имеют кнопку справа вверху, которая затем отображает UIActionSheet. Мое приложение предназначено для iPhone и iPad, поэтому, когда я готов отображать таблицу UIActionSheet, я делаю:
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:[NSString stringWithFormat:@"%@ Menu", [self title]] delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Email", @"Print", nil];
[actionSheet setActionSheetStyle:UIActionSheetStyleDefault];
if ([actionSheet respondsToSelector:@selector(showFromBarButtonItem:animated:)])
[actionSheet showFromBarButtonItem:[[self navigationItem] rightBarButtonItem] animated:YES];
else [actionSheet showInView:[self view]];
[actionSheet release];
На iPad я пытаюсь показать UIActionSheet, прикрепленный к правой кнопке панели, а на iPhone он должен скользить снизу. Все это прекрасно работает.
К сожалению, если вы нажмете кнопку и отобразите меню на iPad, но затем нажмете кнопку «Назад» в верхней левой части приложения, меню не исчезнет. Вместо этого UINavigationController покорно возвращается, и UIActionSheet все еще там. Если вы попытаетесь нажать что-то в меню, вы, конечно, получите сбой. Если бы пользователь нажал что-нибудь еще на экране вместо кнопки «Назад», меню корректно закрывается.
Если вы попробуете этот тест на iPhone, все будет работать как положено. Нет проблем.
В моем демонстрационном проекте есть AppDelegate и ViewController, и это все. AppDelegate создает NSDictionary из NSDictionaries, так что у меня есть модель, которую я могу использовать для демонстрации проблемы. ViewController показывает все ключи словаря, и если соответствующее значение является NSDictionary, вы можете нажать его, чтобы развернуть.