2011-02-01 5 views
5

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

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 нет. Обратите внимание, что при повороте симулятора не вызывается ни один из методов ориентации корневого контроллера. Есть ли проблемы с делегатом? Что не так?

+0

Попробуйте использовать 'showInTabbar' или' showFromBarButtonItem'. Иногда 'showInView' немного глупо. –

+0

Нет ... тот же, не вращается. – xpepermint

+0

Вы нашли решение этой проблемы. Я столкнулся с той же проблемой. –

ответ

6

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

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

  1. Слушайте события вращения.
  2. Слушайте событие click.
  3. Сбросьте действиеСоздание и представите его снова после завершения вращения. (Мы должны ждать небольшую задержку для того, чтобы принять

, например:.

@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

это действительно большое спасибо! – jin

+0

Что касается ориентации на лицевой и лицевой стороне устройства? –

1

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

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

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

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