iPhone UIActionSheet автоматическое вращение не работает - PullRequest
5 голосов
/ 01 февраля 2011

Я много читал об этом.Люди говорят, что он не будет автоматически поворачиваться, когда его родитель не настроен на автоповорот.Я перепробовал все, но не повезло.Я создал приложение на основе представления (v4.2) с кнопкой, которая выполняет это:

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel Button" destructiveButtonTitle:@"Destructive Button" otherButtonTitles:@"Other Button 1", nil];
    actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
    [actionSheet showInView:self.view];

Корневой контроллер настроен на автоповорот.ActionSheet нет.Обратите внимание, что когда я вращаю симулятор, ни один из методов ориентации корневого контроллера не вызывается.Есть ли проблема с делегатом?Что не так?

Ответы [ 2 ]

6 голосов
/ 27 декабря 2012

Ну, вот мое решение этой проблемы:

В основном мы делаем:

  1. Прослушивание события вращения.
  2. Прослушивание события щелчка
  3. Отключите actionSheet и снова представьте его после завершения вращения.(нам нужно подождать небольшую задержку, чтобы это заняло.

, например:

@interface ViewController ()
{
    UIActionSheet *_sheet;
    BOOL _isClicked;
}
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil];
}

- (IBAction)click:(id)sender
{
    _isClicked = YES;

    [self showActionSheet];
}

- (void)didRotate:(NSNotification *)note
{
    [_sheet dismissWithClickedButtonIndex:1 animated:YES];
    [self performSelector:@selector(showActionSheet) withObject:nil afterDelay:1.0];
}

- (void)showActionSheet
{
    if (!_isClicked) return;

    _sheet = [[UIActionSheet alloc] initWithTitle:@"title" delegate:self cancelButtonTitle:@"cancel" destructiveButtonTitle:@"new" otherButtonTitles:@"bla", nil];
    [_sheet showInView:self.view];
}
1 голос
/ 16 февраля 2013

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

Немного изменив код, чтобы метод делегата запомнил взаимодействие с пользователем, и отложив представление листа действий до метода viewDidAppear этого представления, лист появился в нужное время в анимации логического интерфейса. и проблема автоповорота ушла. Возможно, вы захотите посмотреть, поможет ли это вам.

Другими словами, поток стал:

  • Подчиненное представление вызвало метод делегата, чтобы сообщить о выборе, сделанном пользователем при выходе.
  • Родительский просмотр записал эту информацию на потом.
  • Контроллеру навигации было приказано отключить подчиненное представление.
  • viewDidLoad родительского представления: метод обнаружил заметку, сделанную в методе делегата.
  • Был представлен лист действий; вращение было теперь правильным.
...