programacion objective lenguaje framework entre diferencias iphone objective-c cocoa-touch

iphone - lenguaje - objective c vs swift



UIActionSheet botón de cancelación comportamiento extraño (7)

Aquí está la solución. Inténtalo:

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

Tengo un UIBarButtonItem que abre una hoja de acción para ofrecer a los usuarios opciones sobre qué hacer. Todo funciona como se espera a menos que intente hacer clic en el botón "Cancelar". El objetivo del botón parece haberse movido hacia arriba desde donde debería estar. Solo puedo activarlo haciendo clic en algún lugar en medio de los botones "Cancelar" y "Aceptar".

Intenté en hojas de acción en otras aplicaciones y funcionan bien, así que no es solo mi gran pulgar. La hoja de acción se abre en un UIViewController

- (void)showOpenOptions { UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application") delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel") destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link") otherButtonTitles:nil]; [sheet showInView:self.view]; [sheet release]; }


Creo que una combinación de tres de las respuestas es la forma correcta de manejar esto:

[actionSheet showFromTabBar:self.tabBarController.tabBar];

es decir, use showFromTabBar (es por eso que existe) y no necesita parentViewController como señaló Nathan (de hecho, self.parentViewController.tabBarController.tabBar devuelve nil para mí.


En lugar de pasar la vista del controlador de vista actual a la hoja de acción, use el método showFromTabBar: de UIActionSheet .

La manera correcta
Esto le dará el área correcta para tocar:

[actionSheet showFromTabBar:self.tabBarController.tabBar];

La forma incorrecta
Esto colocará el área que se puede tocar en el lugar equivocado (si está utilizando una barra de pestañas o una barra de herramientas):

[actionSheet showInView:self.view];

Si está utilizando una barra de herramientas , use el método showFromToolbar: lugar. Necesitará una referencia a la barra de herramientas, probablemente un ivar

[actionSheet showFromToolbar:self.myToolbar];

My Old Answer También funciona, pero es hacky:

Acabo de encontrar una posible respuesta:

01-dic-2008 22:22 Tom Saxton: Miré este error un poco más, y parece ser un problema con el tabbar.

Si llama a [sheet showInView: self.view] de UIActionSheet desde un controlador de vista que es hijo de un UITabViewController, la prueba de impacto en el botón cancelar falla en esa parte de UIActionSheet que se encuentra sobre la vista de la barra de pestañas.

Si en su lugar, transfiere la vista de UITabBarController, entonces UIActionSheet actúa como se esperaba.

NOTA: en iPhone OS 2.1 y versiones anteriores, UIActionSheet apareció desde la parte superior de la barra de pestañas cuando pasas la vista secundaria, pero en 2.2 aparece desde la parte inferior de la barra de pestañas, y cubre la vista de pestañas.

http://openradar.appspot.com/6410780

Editar: funciona correctamente cuando cambio la vista para que sea la vista de la barra de pestañas

[sheet showInView:self.parentViewController.tabBarController.view];


En su lugar use:

[sheet showFromTabBar:theTabBar];


Encontré una respuesta here que funciona.

utilizando: [filterActionSheet showInView:[self.view window]] ;

Intenté algunas formas de acceder a mi barra de pestañas y esta aplicación está configurada de manera muy complicada ...


FYI - tuvo el mismo problema con la hoja de acciones de UIDocumentInteractionController al pisar la barra de pestañas. Usé lo siguiente para solucionarlo.

UIViewController *parentView = [[self parentViewController] parentViewController]; [docController presentOptionsMenuFromRect: rect inView: parentView.view animated:YES];


escribir código simplite

actionSheet.actionSheetStyle = UIActionSheetStyleDefault;

esto funciona bien