2012-06-12 2 views
1

я успешно реализован UIGestureRecognizer на моем UIWebView как это:Скрытие NavBar на кран не работает

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

    [myUniqueWebView addGestureRecognizer:tap]; 

Существует какая-то ошибка в следующем фрагменте кода, но логика такова: я хочу, чтобы нажать на целях скрыть NavBar, и если он уже скрыт, я хочу использовать ту же логику, чтобы показать его. И он не работает:

-(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 показывает мне сообщение «tap2», и ничего не происходит.

+0

проверить, если «' self.navigationController'»является *** не *** нулевой –

+0

@MichaelDautermann Не могли бы вы дать мне подсказку о том, как он должен посмотреть в коде? –

+0

Просто выполните NSLog (@ "мой NavController% @", self.navigationController); где-то в вашем коде и проверка была отображена. Если на дисплее отображается «myNavController (null)», то у вас нет контроллера навигации, поэтому вы не сможете отображать/скрывать навигационную панель. – Niko

ответ

1

Вы должны объявить didHideNavBar вне метода handleTap и добавить return; в конце первого if, как это:

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"); 
    } 
} 
+0

Вы добавили возврат; в конце первого, если? –

+0

Это работает, но теперь он работает только ** один раз **! Если я скрою NavBar, я снова покажу его, я больше не могу его показывать или скрывать. –

+0

set 'didHideNavBar = 0;' во втором выражении 'if'. Вы забыли сделать это в своем коде –

0

увидеть ваш код. u устанавливают переменную didHideNavBar в 0, которая затем в случае, если условие установлено в 1, ваша панель навигации будет скрыта, а затем отобразится. и вы не сможете увидеть этот акт, как это будет сделано за очень короткое время.

+0

Итак, как мне переопределить это поведение? –

+0

что вы хотите точно? – Saad

0

привет сделать, пожалуйста, ваш didHideNavBar статическими, потому что, когда handleTap метод вызывается, то присвоить нулевое значение для didHideNavBar.

так что это меняет

static NSInteger didHideNavBar = 0; 
0
-(void) handleTap { 

    BOOL isHidden = (parentViewController.navigationController.navigationBar.alpha == 0); 
    self.navigationController.navigationBar.alpha = (isHidden) ? 1 : 0; 
} 
Смежные вопросы