2009-08-14 221 views
8

我有點新的iPhone開發,並沒有做任何事情,但尚未包含觸摸。 我的看法是這樣的層次結構:檢測點擊以顯示/隱藏UINavigationBar

UIView - UIImageView - UIScrollView - CustomView 

如何檢測,如果用戶在屏幕上的任何地方挖掘,所以我可以顯示/隱藏相應的導航欄?我不需要在我的CustomView上進行用戶交互,但是我想在用戶只需拖動它時忽略UIScrollView的觸摸。

我已經可以顯示/隱藏我的視圖控制器導航欄編程方式使用:

[self.navigationController setNavigationBarHidden:YES animated:YES]; 

提前感謝!

回答

5

您可以使用該方法的touchesBegan在UIView的檢測自來水,所以你必須有UIView爲您想以檢測水龍頭的ViewController的看法自定義子類。然後,您將不得不使用委託向消息的控制器發送消息,以便隱藏navigationBar

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSUInteger numTaps = [[touches anyObject] tapCount]; 
    if (numTaps == 1) 
    { 
     [delegateController tapDidOccur]; 
    } 
} 
+0

這樣確實可以做到這一點的方式。謝謝。現在我遇到了一些問題,將該事件分發給代理。我是否需要擴展UIScrollViewDelegate接口來聲明tapDidOccur方法? – leolobato 2009-08-16 23:18:43

+0

我覆蓋了UIScrollView的子類上的委託@property,通過我的「tapDidOccur」方法實現了「tappable」協議,現在它工作正常。謝謝! – leolobato 2009-08-16 23:36:48

16
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showHideNavbar:)]; 
[self.view addGestureRecognizer:tapGesture]; 
[tapGesture release]; 

-(void) showHideNavbar:(id) sender { // write code to show/hide nav bar here } 

這是使用UIGestureRecognizers可在iOS4的

+2

這是一個更清潔和更優雅的解決方案,如果你能負擔得起只針對iOS 4 +。 – 2011-02-09 21:39:56

+0

什麼是註冊這個最好的地方?我在想viewDidAppear。 – 2011-10-14 22:39:47

+1

更好的viewDidLoad – Mugunth 2012-03-01 08:32:31