последняя кнопка на листе действий не нажата - PullRequest
24 голосов
/ 15 декабря 2010

Я использовал лист действий в своем проекте, и когда он появляется, он показывает все кнопки, но последняя (4-я) кнопка не реагирует на мой щелчок (реагирует только половина) ..

Я знаю причинуэто потому, что я использовал TabBarController и настоящий класс находится внутри этого контроллера вкладок .... только та часть таблицы действий реагирует, которая находится над вкладками .... и моя последняя кнопка наполовину выше, а половина сверхувкладки

помогите пожалуйста

Ответы [ 3 ]

83 голосов
/ 15 декабря 2010

Я предлагаю использовать это:

[actionSheet showInView:[UIApplication sharedApplication].keyWindow];

У меня была та же проблема, что и у вас, и я использовал этот метод, чтобы показать, что она работает для меня.TabBar хочет остаться ключевым окном, что заставляет вашу нижнюю кнопку отображаться выше, но на самом деле находится под панелью вкладок.

Надеюсь, это поможет вам ...

Редактировать

Если вы используете ландшафтный режим, а описанный выше метод не работает.Вы можете использовать следующее исправление:

@ Vinh Tran: [sheet showFromTabBar: self.parentViewController.tabBarController.tabBar]

3 голосов
/ 15 декабря 2010

Какой метод вы используете, чтобы показать свой лист действий.Попробуйте showFromTabBar: метод

0 голосов
/ 11 января 2012

Реальная проблема возникает, когда ваш интерфейс повернут в горизонтальную плоскость, а родительский контроллер представления преобразован в него. Поверь мне, это реалистичный сценарий, дох. Затем лист действий обрезается, и вы не можете использовать parentViewController, потому что он преобразован. Чтобы избежать всех этих проблем, нужно создать новое окно, добавить вращающийся контроллер представления в качестве rootViewController и использовать его представление для отображения листа.

CGRect applicationRect = [[UIScreen mainScreen] bounds];
UIWindow* actionSheetWindow = [[UIWindow alloc] initWithFrame:applicationRect];
RotationViewController* rootViewController = [[RotationViewController alloc] initWithNibName:nil bundle:nil];
actionSheetWindow.rootViewController = rootViewController;
[rootViewController release];
actionSheetWindow.hidden = NO;

UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:nil];
[actionSheet setCancelButtonWithTitle:@"Cancel" handler:^{
    actionSheetWindow.hidden = YES;
    [actionSheetWindow release];
}];

[actionSheet showInView:rootViewController.view];

Приведенный выше код использует BlocksKit, но вы можете сделать это также с помощью свойств делегата и экземпляра actionSheet.

RotationViewController - это просто подкласс UIViewController, который реализует

- (void) viewDidLoad {
   [super viewDidLoad];
   self.view.backgroundColor = [UIColor clearColor];
   self.view.opaque = NO;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
  return YES;
}
...