2011-02-01 21 views
5

He leído mucho sobre eso. La gente dice que no va a autorrotar si su padre no está configurado para rotar automáticamente. Intenté todo, pero no tuve suerte. creé aplicación basada en la vista (v4.2) con un botón que realiza esto:iPhone UIActionSheet auto-rotación no funciona

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]; 

El controlador de raíz se establece para auto-rotación. ActionSheet no. Tenga en cuenta que cuando giro el simulador, no se invocan ninguno de los métodos de orientación del controlador raíz. ¿Hay algún problema con el delegado? ¿Qué está mal?

+0

Pruebe usar 'showInTabbar' o' showFromBarButtonItem'. 'showInView' es un poco estúpido a veces. –

+0

No ... lo mismo, no gira. – xpepermint

+0

¿Encontró una solución a este problema? Estoy enfrentando el mismo problema. –

Respuesta

6

Bueno, aquí está mi solución a este problema:

Básicamente lo que hacemos es:

  1. detectar el evento rotación.
  2. evento Escuchar clic.
  3. Deseche la hoja de acción y vuelva a presentarla una vez que haya finalizado la rotación. (Tenemos que esperar un pequeño retraso con el fin de que entre en

por ejemplo:.

@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

es realmente muchas gracias! – jin

+0

¿qué pasa con las orientaciones de los dispositivos cara arriba y boca abajo? –

1

me encontré con que estaba corriendo en este problema cuando yo estaba presentando la hoja de la acción de un delegado método desde una vista subordinada (que había presionado usando el controlador de navegación). El problema era que mi vista no era la actual, la vista subordinada aún estaba en el punto donde estaba tratando de mostrar la hoja de acción.

Al cambiar mi código un poco para que el método delegado tomara nota de la interacción ne eded con el usuario, y difiriendo la presentación de la hoja de acción al método viewDidAppear de esta vista, la hoja apareció en el momento adecuado en la animación de la interfaz lógica, y el problema de auto rotación desapareció. Es posible que desee ver si eso lo ayuda.

En otras palabras, el flujo se convirtió en:

  • vista subordinado llamado método de delegado para informar al usuario opciones hecho al salir.
  • La vista principal registró esta información para más adelante.
  • Al controlador de navegación se le indicó que saltara de la vista subordinada.
  • ViewDidLoad de vista padre: el método detectó la nota realizada en el método de delegado.
  • Se presentó la hoja de acción; la rotación ahora era correcta.
Cuestiones relacionadas