Mi aplicación tiene un controlador de navegación y no quiero ningún tipo de animación :

  • para evitar una animación al empujar un punto de vista, es fácil, a través de la pushViewController:animación: método

  • pero cuando hago clic en el botón «atrás» en esta subvista, hay una animación ! KO ! ¿Qué puedo hacer para prevenir que esto de la animación ?

¿Por qué quieres romper la interfaz de usuario con la no-estándar de comportamiento?
No es que no quiero romper la interfaz de usuario con la no-estándar de comportamiento. Yo no entiendo por qué el SDK de funciones de control para un empujón para ser animados o no, pero no cuentan con el mismo control para un pop. Creo que es inconsistente.
no-estándar de comportamiento nos hace crecer 🙂

OriginalEl autor Dirty Henry | 2010-06-25

5 Comentarios

  1. 3

    Más elegante con una categoría. Esto supone que la navegación controlador de objeto se establece en el delegado de la aplicación. Sólo hay que poner esto antes de su @establecimiento en la raíz de controlador de vista.

    #import "AppDelegate.h"
    
    @implementation UINavigationBar (custom)
    - (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated;
    {
    
        AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    
        [delegate.navController popViewControllerAnimated:NO];
    
        return TRUE;
    }
    
    
    @end
    Gracias por tu respuesta, he probado y realmente funciona, pero es sorprendente porque devolver TRUE para algo esperando un UINavigationItem.
    Además, esta solución funciona si tienes 1 y sólo 1 controlador de navegación en la aplicación. No funciona con múltiples controladores de navegación.
    acaba de llegar de rebote por encima de mi cabeza. Plz explaian . soy nuevo bie. Thals
    Una categoría agrega o reemplaza los métodos en una clase. Esta categoría de método reemplaza la – (UINavigationItem *)popNavigationItemAnimated:(BOOL)animados; el método y los cambios en el comportamiento.
    -1 para el uso de CIERTO en lugar de en SÍ. Por cierto, el tipo de retorno es UINavigationsItem *, no un booleano

    OriginalEl autor Martin

  2. 4

    Esto evita la animación por defecto.

    - (void)viewWillDisappear:(BOOL)animated {
        [UIView setAnimationsEnabled: NO];
    }
    
    - (void)viewDidDisappear:(BOOL)animated {
        [UIView setAnimationsEnabled: YES];
    }

    En caso si usted necesita una animación personalizada

    - (void)viewWillDisappear:(BOOL)animated {
        [UIView setAnimationsEnabled: NO];
    
        CATransition *transition = [CATransition animation];
        transition.duration = 0.3;
        transition.type = kCATransitionFade;
        [self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
    }
    
    - (void)viewDidDisappear:(BOOL)animated {
        [UIView setAnimationsEnabled: YES];
    }

    OriginalEl autor Evgeny Karpov

  3. 3

    Me vino a por LO que buscar una solución más elegante, pero así es como yo lo he sido (con éxito) haciendo hasta ahora.

    La idea básica:

    1. NO utilice UINavigationController; en lugar de utilizar las partes constituyentes (por ejemplo, UINavigationBar) y hacer el trabajo usted mismo
    2. Activar la barra de navegación, para animar en paralelo con sus propias animaciones personalizadas (o no, si no queremos anim)

    Los aspectos negativos:

    1. UINavigationController controla algunas otras cosas, como la memoria de carga/descarga, automáticamente. También, es «codificados» en todos los UIViewControllers – SIEMPRE tienen una referencia a la UINavigationController que los contiene. Es una pena tirar a la basura solo porque Apple no ofrece un gancho para la configuración personalizada anims.

    De código en cualquier clase toma las riendas de la animación:

    UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"];
    [navigationController.navigationBar pushNavigationItem:backItem animated:TRUE];
    //next line only needed if you want a custom back anim too
    navigationController.navigationBar.delegate = self;

    …si usted también quiere cortar con la costumbre de vuelta de la animación, se necesita que la última línea de arriba, de modo que usted puede escuchar el navbar y reaccionar en paralelo, como este:

    - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
    {
        //trigger your custom back animation here
    
        return TRUE;
    }
    Gracias por tu respuesta ! Pero tienes razón : soy demasiado perezoso para lanzar todas las UINavigationController características de lejos y prefiero que permite la animación 😉
    *** Terminación de la aplicación debido a uncaught exception ‘NSInternalInconsistencyException’, la razón: «No se puede establecer manualmente el delegado en un UINavigationBar gestionado por un controlador.’
    Vuelva a leer el paso 1 anterior
    Lo que está pasando aquí. yo no podía entender nada. alguien me ayuda plz

    OriginalEl autor Adam

  4. 2

    No que usted debe, sin embargo, usted puede reemplazar el estándar de comportamiento mediante la creación de una costumbre leftBarButtonItem en su viewController.

    UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)];
    [[self navigationItem] setLeftBarButtonItem:item];
    [item release];
    
    - (void)backButtonPressed
    {
        [[self navigationContoller] popViewControllerAnimated:NO];
    }

    La documentación dice que sólo debe pasar NO antes de el nav del controlador se muestra la vista.

    Recuerde que las solicitudes que no se ajusten a la Interfaz del iPhone instrucciones no serán aceptados en el app store.

    Ese código está libre de errores, y aun entonces sólo parcialmente las obras. Usted no va a obtener la «flecha» botón de la forma. Error en el código que falta «]» en la línea 1. Además, su código en la línea 2 es incorrecta – creo que debería leer: «[auto.navigationItem setLeftBarButtonItem:elemento];» w.r.t. «żes esto aceptable por parte de Apple»: 1. Eso no es cierto – muchas muchas aplicaciones que violan la HIG son aceptadas; muchos de Apple propias aplicaciones violan de forma flagrante. 2. En cualquier momento usted desea hacer una inserción personalizados/pop animación par, deberá desactivar el predeterminado (que desde que Apple no proporciona una API pública para anular).
    Gracias por tu respuesta. Sin embargo, estoy de acuerdo con Adam : la «flecha» de la forma es un DEBE tener en una aplicación para iPhone.
    Siempre se puede volver a crear la flecha de la imagen. Creo que es una práctica bastante común, ya que apple no le da una manera de hacer una programación.
    Yo amfacing perezoso oading problema en iOS 7 y anteriores. ¿Hay alguna otra manera???

    OriginalEl autor falconcreek

Dejar respuesta

Please enter your comment!
Please enter your name here