У меня есть 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];
}
ios
objective-c
iphone
cocoa-touch
uiactionsheet
Неванский король
источник
источник
Ответы:
Вместо того, чтобы передавать представление текущего контроллера представления в лист действий, используйте
showFromTabBar:
методUIActionSheet
.Правильный путь
Это даст правильную область касания:
Неправильный способ
Это приведет к тому, что область нажатия окажется не в том месте (если вы используете панель вкладок или панель инструментов):
Если вы используете панель инструментов , используйте
showFromToolbar:
вместо этого метод. Вам понадобится ссылка на панель инструментов, скорее всего, ivarМой старый ответ тоже работает, но взломан:
Только что нашел возможный ответ:
http://openradar.appspot.com/6410780
Изменить: он работает правильно, когда я меняю вид на вид панели вкладок
источник
Я нашел ответ в течение здесь , что работает.
используя
[filterActionSheet showInView:[self.view window]]
:;Я попробовал несколько способов добраться до панели вкладок, и, как это приложение настроено, кажется запутанным ...
источник
Вместо этого используйте:
источник
showInTabBar:
наshowFromTabBar:
. Также обратите внимание, что есть метод showFromToolbar: в зависимости от того, какая экранная мебель у вас внизу экрана. Я думаю, что это лучший ответ, чем принятый ответ.Вот исправление. Попробуйте это:
источник
Я думаю, что сочетание трех ответов - правильный способ справиться с этим:
то есть используйте showFromTabBar (вот почему он существует), и вам не нужен parentViewController, как указал Натан (фактически, self.parentViewController.tabBarController.tabBar возвращает для меня nil.
источник
FYI - была та же проблема с таблицей действий UIDocumentInteractionController, наступающей на панель вкладок. Для исправления использовал следующее.
источник
писать упрощенный код
это отлично работает
источник