方法 1:
に を追加するのはどうTapGestureRecogniser
ですかUINavigationBar
。これは、navigationBar にボタンがない場合にのみ機能します。
//Create a tap gesture with the method to call when tap gesture has been detected
UITapGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(navBarClicked):];
//isolate tap to only the navigation bar
[self.navigationController.navigationBar addGestureRecognizer:tapRecognizer];
//same method name used when setting the tapGesure's selector
-(void)navBarClicked:(UIGestureRecognizer*)recognizer{
//add code to scroll your tableView to the top.
}
それは本当にそれについてです。
一部の人々は、ナビゲーション バーにタップ ジェスチャを追加すると戻るボタンが機能しなくなることに気付いたので、次の 2 つのいずれかを行うことができます。
- 方法 2: ユーザー インタラクションを有効に設定し、方法 2 で詳細に示されているように、タップ ジェスチャ認識機能を設定します。
- 方法 3:
UIGestureRecognizerDelegate
と呼ばれるメソッドを使用して、タッチのビューがボタンの場合は return にしgestureRecognizer:shouldReceiveTouch
ます。それ以外の場合は return にします。詳細については、方法 3 を参照してください。NO
YES
ポイント1の方法2: - 汚い/ハックっぽい
[[self.navigationController.navigationBar.subviews objectAtIndex:1] setUserInteractionEnabled:YES];
[[self.navigationController.navigationBar.subviews objectAtIndex:1] addGestureRecognizer:tapRecognizer];
ポイント 2 の方法 3: - はるかに優れた、正しい方法
ファイルにUIGestureRecognizerDelegate
プロトコルを実装し、ファイルに次を追加します。.h
.m
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
// Disallow recognition of tap gestures when a navigation Item is tapped
if ((touch.view == backbutton)) {//your back button/left button/whatever buttons you have
return NO;
}
return YES;
}