ActionSheet в UISplitViewController действует иначе в портретном режиме, чем в альбомном режиме - PullRequest
5 голосов
/ 01 октября 2011

Я создал новое приложение, используя шаблон приложения Split View.

Затем я добавил кнопку действия в контроллер навигации rootViewController, который называется actionButton.

Когда кнопка нажата, я отображаю ActionSheet так:

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil 
    delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil
    otherButtonTitles:@"Admin Functions", @"Refresh Data", nil];
[actionSheet showFromBarButtonItem:actionButton animated:YES];
[actionSheet release];

После того, как я нажимаю кнопку в ландшафтном режиме, он отображает лист действий в всплывающем окне, которое указывает на кнопку (как я и ожидал):

Landscape Mode

Однако в портретном режиме это выглядит совершенно иначе, и меню появляется в нижней части всплывающего окна rootViewController, как и на iPhone:

Portrait Mode

У меня вопрос: как сделать так, чтобы ActionSheet отображался вверху в портретном режиме, так же, как в альбомном режиме?

Поскольку это «служебное меню», оно на самом деле не связано напрямую с отображаемыми данными, поэтому оно не должно быть частью всплывающего окна.

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Такое поведение предусмотрено, если бы это был поповер в портретном режиме, то у вас было бы 2 уровня поповера.

Технически это возможно, если вы внедрите собственную версию UIPopover или используете уже написанную версию ( WEPopover ).

Однако это плохой выбор дизайна. Вы говорите, что функции не связаны с данными, однако одна из них - «обновить данные». Я бы заменил кнопку действия на значок обновления, например, тот, который Apple использует в «Найти моих друзей»:

Refresh Button

Другим «функциям администратора», если они не связаны напрямую с данными в списке, возможно, нужен новый дом, возможно, с основным видом вашего приложения? Трудно сказать, куда лучше всего поместить это, не зная больше о структуре.

0 голосов
/ 22 октября 2011

Другая возможность заключается в том, что вы можете переместить кнопку действия от правого края панели контроллера корневого просмотра к левому краю панели контроллера подробного просмотра.

Например, если кнопка действия была расположена только длясправа от вертикальной полосы на первом снимке экрана (это означает, что он находится на левом краю панели контроллера детального просмотра), затем при повороте в портретный режим он будет отображаться справа от кнопки «События» на втором снимке экрана.Вы по-прежнему можете вызывать метод showFromBarButtonItem:animated UIActionSheet, который будет отображать ваш лист действий в всплывающем режиме.

По-прежнему остается вопрос о том, действительно ли вы хотите, чтобы два всплывающих окна отображались одновременноНо если вы это сделаете, это как это сделать.

...