Кнопка UIActionSheet cancel button странное поведение
У меня есть UIBarButtonItem, открывающий лист действий, чтобы предложить пользователям выбор того, что делать. Все работает как положено, если я не пытаюсь нажать на кнопку "Отмена". Цель кнопки, кажется, переместилась вверх от того места, где она должна быть. Я могу активировать его только нажатием где-то посередине кнопок "Отмена" и "Ок".
Я пробовал листы действий в других приложениях, и они отлично работают, так что это не просто мой большой палец. Лист действий открывается в UIViewController
- (void)showOpenOptions
{
UIActionSheet *sheet = [[UIActionSheet alloc]
initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link")
otherButtonTitles:nil];
[sheet showInView:self.view];
[sheet release];
}
Ответы
Ответ 1
Вместо того, чтобы передавать представление текущего представления контроллера в лист действий, используйте метод showFromTabBar:
UIActionSheet
.
Правильный путь
Это даст правильную область сбрасывания:
[actionSheet showFromTabBar:self.tabBarController.tabBar];
Неверный путь
Это приведет к тому, что область, подлежащая отображению, окажется не в том месте (если вы используете панель вкладок или панель инструментов):
[actionSheet showInView:self.view];
Если вы используете панель инструментов, используйте вместо этого метод showFromToolbar:
. Вам понадобится ссылка на панель инструментов, скорее всего, ivar
[actionSheet showFromToolbar:self.myToolbar];
Мой старый ответ Также работает, но хакен:
Просто нашел возможный ответ:
01-Dec-2008 10:22 PM Том Сакстон: Я еще раз посмотрел на эту ошибку и, похоже, проблема с вкладкой.
Если вы вызываете UIActionSheet [sheet showInView: self.view] из контроллера представления, который является дочерним элементом UITabViewController, тогда проверка ударов по кнопке отмены не выполняется в той части таблицы UIActionSheet, которая находится над представлением на вкладке.
Если вы переходите в представление UITabBarController, тогда UIActionSheet действует как ожидалось.
ПРИМЕЧАНИЕ. В iPhone OS 2.1 и более ранних версиях UIActionSheet выходил из верхней части панели вкладок при передаче дочернего вида, но в версии 2.2 он выходил из нижней части панели вкладок и, таким образом, закрывал вкладку вид.
http://openradar.appspot.com/6410780
Изменить: Он работает правильно, когда я меняю представление на представление панели вкладок
[sheet showInView:self.parentViewController.tabBarController.view];
Ответ 2
Я нашел ответ на здесь, который работает.
используя: [filterActionSheet showInView:[self.view window]]
;
Я попробовал несколько способов добраться до панели вкладок, и они, как это приложение настроено, кажутся запутанными...
Ответ 3
Вместо этого используйте:
[sheet showFromTabBar:theTabBar];
Ответ 4
Вот исправление. Попробуйте следующее:
[actionsheet showInView:[UIApplication sharedApplication].keyWindow];
Ответ 5
Я думаю, что комбинация из трех ответов - правильный способ справиться с этим:
[actionSheet showFromTabBar:self.tabBarController.tabBar];
i.e, используйте showFromTabBar (почему он существует), и вам не нужен родительский контроль, как указал Натан (на самом деле self.parentViewController.tabBarController.tabBar возвращает нуль для меня.
Ответ 6
FYI - имел ту же проблему с таблицей действий UIDocumentInteractionController, шаг за шагом на вкладке. Использовано следующее для исправления.
UIViewController *parentView = [[self parentViewController] parentViewController];
[docController presentOptionsMenuFromRect: rect inView: parentView.view animated:YES];
Ответ 7
написать простой код
actionSheet.actionSheetStyle = UIActionSheetStyleDefault;
эта работа отлично