Tengo un UIBarButtonItem la apertura de una hoja de acción para ofrecer a los usuarios tomar decisiones acerca de qué hacer. Todo funciona como se espera, a menos que yo intente hacer clic en el botón «Cancelar». El objetivo de aparece el botón se han movido hacia arriba de donde debería estar. Sólo puedo activar haciendo clic en algún lugar en el medio de la opción «Cancelar» y los botones «Aceptar».

He probado en hojas de acción en otras aplicaciones y funcionan bien, así que no es sólo mi gran pulgar. La acción de la hoja que se está abriendo 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];
}
  • En una relación de nota, me dijeron en la WWDC durante una interfaz de usuario de Apple sesión de revisión de que el botón rojo en Hojas de Acción es realmente la intención de ‘destructivo’ acciones (es decir, ‘eliminar’).
  • Sí, leí la interfaz humana directrices recientemente y vio que. Cambió de rojo a gris.
InformationsquelleAutor nevan king | 2009-07-29

7 Comentarios

  1. 190

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

    De La Manera Correcta

    Esto le dará la correcta para tocar la zona:

    [actionSheet showFromTabBar:self.tabBarController.tabBar];

    El Camino Equivocado

    Esto pone a tocar el área en el lugar equivocado (si está utilizando una ficha de la barra o de la barra de herramientas):

    [actionSheet showInView:self.view];

    Si usted está utilizando una barra de herramientas, el uso de la showFromToolbar: método en su lugar. Usted necesitará una referencia a la barra de herramientas, más probable es que un ivar

    [actionSheet showFromToolbar:self.myToolbar];

    Mi Respuesta anterior También funciona, pero es chapucero:

    Acabo de encontrar una posible respuesta:

    01-Dic-2008 10:22 PM Tom Saxton:
    Miré a este error algunos más, y parece ser un problema con la tabbar.

    Si usted llama UIActionSheet del [hoja de showInView:auto.vista] de un controlador de vista de que es un hijo de un UITabViewController, entonces el éxito de las pruebas en el botón cancelar falla en la porción de la UIActionSheet que se encuentra por encima de la tabbar la vista.

    Si, en lugar de pasar en el UITabBarController la vista, luego el UIActionSheet actúa como se espera.

    NOTA: en la versión de iPhone OS 2.1 y versiones anteriores, el UIActionSheet vino de la parte superior de la barra de pestañas cuando se pasa el niño, pero en el apartado 2.2, se trata de la parte inferior de la barra de pestañas, y por lo tanto, abarca la vista de la pestaña.

    http://openradar.appspot.com/6410780

    Edición: funciona correctamente al cambiar el punto de vista de la pestaña de la barra de vista

    [sheet showInView:self.parentViewController.tabBarController.view];
    • Usted acaba de me ayudó a resolver un problema que yo no sabía que tenía!
    • Upvoted esto debido a que se trabaja. ¿Por qué esto es mejor que las otras respuestas?
    • Una respuesta que sigue ayudando… buen trabajo!
    • Gran respuesta – muchas gracias.
    • Wow! increíble! bueno bueno!!
    • Sí, esto me tenía pensando mi ratón se ha roto.. gracias!
    • ¿Por qué el parentViewController? Incluso si la vista está en una vista denavegación tabBarController todavía debe señalar el lugar correcto. A mi me funciona sin el parentViewController en cualquier caso.
    • Otra respuesta parece potencialmente mejor. Buscar [actionSheet showInView:[auto.ventana de vista]]. Parece más sencillo y más genérico.
    • Muchas gracias por publicar esta respuesta.
    • Gracias funciona bien, aunque parentViewController no es necesario.
    • Saludos! Otro upvote. solucionado mi problema!
    • No tengo la barra de pestañas en mi aplicación, pero todavía tiene un problema de este tipo. He resuelto con ‘[de servidumbre.ventana de vista]’. No es la barra de pestañas problema de todos modos.
    • Upvoted pero todavía tengo problemas con que se dirigen a la zona problema.El botón cancelar ahora funciona bien para mí, sin embargo.

  2. 37

    He encontrado una respuesta más aquí que funciona.

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

    he intentado un par de maneras de llegar a mi barra de pestañas y de la manera en que esta aplicación se establece que parece complicado…

    • PERFECTO! Gracias. Esta es la solución correcta para mí, como yo estaba teniendo este problema con un UITableViewController que había una barra de herramientas no un TabBar como otros aquí.
    • A mí me funciona! Gracias!
    • bueno, esto funcionó para mí! esta es sin duda la forma más fácil de hacerlo!
    • Es la causa de otro problema. ActionSheet aparece en la orientación vertical cuando el dispositivo en el paisaje (así como todos los otros contenidos).
    • Mejor y más sencilla solución.
  3. 22

    Lugar de utilizar:

    [sheet showFromTabBar:theTabBar];
    • He corregido este de showInTabBar: a showFromTabBar:. También tenga en cuenta que hay un ‘showFromToolbar:` método, dependiendo de lo que la pantalla de muebles que usted tiene en la parte inferior de la pantalla. Este, creo, es la mejor respuesta que el aceptado respuesta.
    • Esteban, por curiosidad, ¿por qué crees que esto es mejor que la especificación de showInView:theTabBar? A partir de un acoplamiento punto de vista, yo pensaría que showInView probablemente sería más ideal, en caso de que más tarde en la tabBar se cae, tal vez reemplazado con una barra de herramientas, por ejemplo. El particular sub controlador de vista no debería realmente sabe ni le importa, me gustaría pensar.
    • Si la barra de pestañas se dejó caer más tarde, usted va a tener que editar la línea de código a pesar de todo (menos quizás theTabBar es un mal llamados referencia a una vista que se pasa en). Así que no veo cómo este método está más unida que showInView:theTabBar. Yo uso showFromTabBar: como bien, como parece más seguro para mí. No sé lo que está pasando debajo de las mantas, pero me imagino que showFromTabBar: es menos probable que se rompa en el futuro OS libera de showFromView: con una ficha vista de la barra.
  4. 10

    Aquí está la solución.Intente esto:

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

    Creo que una combinación de tres de las respuestas es la manera correcta de manejar este:

        [actionSheet showFromTabBar:self.tabBarController.tabBar];

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

    • Por supuesto, devuelve nil, debido a que el padre de controlador de vista (que es el UITabBarViewController) no está anidado a sí mismo en otro UITabBarController, por lo que su tabBarController de la propiedad es igual a cero.
  6. 1

    FYI – tenía el mismo problema con UIDocumentInteractionController del actionsheet pisar el tabbar. Utiliza la siguiente revisión.

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

Dejar respuesta

Please enter your comment!
Please enter your name here