2012-06-12 53 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; 
}