2012-06-12 23 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(@“my NavController%@”,self.navigationController);显示代码中的某处并检查。如果显示是“myNavController(null)”,那么你没有任何导航控制器,因此将无法显示/隐藏导航栏 – Niko

回答

1

你应该申报didHideNavBarhandleTap方法之外,在第一if这样的末尾添加return;

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

在第二个if语句中设置'didHideNavBar = 0;'。您忘记了在您的代码中执行 –

0

看到你的代码。你将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; 
}