Ocultar NavBar al tocar no funciona

Implementé con éxito UIGestureRecognizer en mi UIWebView de esta manera:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self 
                                                                          action:@selector(handleTap)];
    tap.numberOfTapsRequired = 1;

    [myUniqueWebView addGestureRecognizer:tap];

Hay un error en el siguiente fragmento de código, pero la lógica es la siguiente: quiero tocar una vista para ocultar la barra de navegación y, si ya está oculta, quiero usar la misma lógica para mostrarla. Y no funciona:

-(void) handleTap {
    NSInteger didHideNavBar;
    didHideNavBar = 0;
    if ((didHideNavBar = 0)) {
        [self.navigationController setNavigationBarHidden:YES animated:YES];
        didHideNavBar = 1;
        NSLog(@"tap1");
    } 
    if ((didHideNavBar = 1)) {
        [self.navigationController setNavigationBarHidden:NO animated:YES];
        NSLog(@"tap2");
    }
}

Xcode me muestra el mensaje "tap2" y no pasa nada.

preguntado el 12 de junio de 12 a las 13:06

comprobar para ver si "self.navigationController"es no nulo -

@MichaelDautermann ¿Podría darme una pista sobre cómo debería verse en el código? -

Simplemente haga un NSLog(@"my NavController %@", self.navigationController); en algún lugar de su código y se muestra el cheque. Si la pantalla es "myNavController (null)", entonces no tiene ningún controlador de navegación y, por lo tanto, no podrá mostrar/ocultar una barra de navegación.

Cuando compare dos valores, debe usar == not =.In if ((didHideNavBar = 0)) use ==.Y como sugiere Zeus, declare NSInteger didHideNavBar = 0; fuera del mangoTap. -

Puede crear una barra de navegación personalizada, eche un vistazo a este [Enlace][1] [1]: stackoverflow.com/questions/10990963/… -

4 Respuestas

Deberías declarar didHideNavBar afuera de handleTap método y agregar return; al final de la primera if Me gusta esto:

NSInteger didHideNavBar = 0;
-(void) handleTap {
    if ((didHideNavBar = 0)) {
        [self.navigationController setNavigationBarHidden:YES animated:YES];
        didHideNavBar = 1;
        NSLog(@"tap1");
        return;
    } 
    if ((didHideNavBar = 1)) {
        [self.navigationController setNavigationBarHidden:NO animated:YES];
        didHideNavBar = 0;
        NSLog(@"tap2");
    }
}

Respondido el 12 de junio de 12 a las 13:06

agregaste retorno; al final de la primera si? - Zeus Alejandro

Esto funciona, pero ahora solo funciona una vez! Si escondo la barra de navegación, la vuelvo a mostrar. Ya no puedo mostrarla ni ocultarla. - Serguéi Grischov

planificadas didHideNavBar = 0; en el segundo if declaración. Olvidaste hacerlo en tu código - Zeus Alejandro

ver su código. está configurando la variable didHideNavBar en 0, que luego, si la condición se configura en 1, su barra de navegación se ocultará y luego se mostrará. y no podrás ver esta actina ya que lo hará en muy poco tiempo.

Respondido el 12 de junio de 12 a las 13:06

Entonces, ¿cómo debo anular este comportamiento? - Serguéi Grischov

hola por favor haz tu didHideNavBar estático, porque cada vez que mangoGrifo se llama el método, asigna valor cero a didHideNavBar.

así que haz estos cambios

static NSInteger didHideNavBar = 0;

Respondido el 12 de junio de 12 a las 13:06

-(void) handleTap {

    BOOL isHidden = (parentViewController.navigationController.navigationBar.alpha == 0);
    self.navigationController.navigationBar.alpha = (isHidden) ? 1 : 0;
}

Respondido el 12 de junio de 12 a las 14:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.