1

私は a UIView、 a UINavigationBar、 aUITabBarを持っていUITableViewます。ステータスバーを押すと、UITableViewに設定されているため、スクロールして一番上に表示されTRUEます。

UINavigationBar一部のアプリで発生するのと同じように押すことで、同じことができるようにしたいです。を に設定すると、ユーザーが を押した場合UITableViewにのみ機能します。scrollsToTop = TRUEStatusBar

4

1 に答える 1

2

方法 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 つのいずれかを行うことができます。

  1. 方法 2: ユーザー インタラクションを有効に設定し、方法 2 で詳細に示されているように、タップ ジェスチャ認識機能を設定します。
  2. 方法 3:UIGestureRecognizerDelegateと呼ばれるメソッドを使用して、タッチのビューがボタンの場合は return にしgestureRecognizer:shouldReceiveTouchます。それ以外の場合は return にします。詳細については、方法 3 を参照してください。NOYES

ポイント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;
}
于 2014-01-18T17:08:49.330 に答える