4

在我的 iPad 应用程序中,我在屏幕上有多个视图。

我想要做的是将双击手势识别器应用于导航栏。但是我没有成功,但是当相同的手势识别器应用于该视图时,它可以工作。

这是我正在使用的代码:

// Create gesture recognizer, notice the selector method
UITapGestureRecognizer *oneFingerTwoTaps = 
[[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneFingerTwoTaps)] autorelease];

// Set required taps and number of touches
[oneFingerTwoTaps setNumberOfTapsRequired:2];
[oneFingerTwoTaps setNumberOfTouchesRequired:1];

[self.view addGestureRecognizer:oneFingerTwoTaps];

这在视图上有效,但是完成后:

[self.navigationController.navigationBar addGestureRecognizer:oneFingerTwoTaps]

不起作用。

4

2 回答 2

8

对于其他查看此内容的人,这是一种更简单的方法。

[self.navigationController.view addGestureRecognizer:oneFingerTwoTaps];
于 2015-01-14T07:14:34.807 回答
4

为此,您需要继承 UINavigationBar,覆盖其中的 init 按钮并在那里添加您的手势识别器。

因此,假设您创建了一个名为“CustomNavigationBar”的子类 - 在您的 m 文件中,您将有一个像这样的 init 方法:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    if ((self = [super initWithCoder:aDecoder])) 
    {
        UISwipeGestureRecognizer *swipeRight;
        swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeRight:)];
        [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
        [swipeRight setNumberOfTouchesRequired:1];
        [swipeRight setEnabled:YES];
        [self addGestureRecognizer:swipeRight];
    }
    return self;
}

然后,您需要在界面构建器中将导航栏的类名设置为您的子类的名称。

在此处输入图像描述

此外,将委托协议添加到导航栏以侦听手势结束时发送的方法也很方便。例如 - 在上述向右滑动的情况下:

@protocol CustomNavigationbarDelegate <NSObject>
    - (void)customNavBarDidFinishSwipeRight;
@end

然后在 m 文件中 - 在手势识别方法(无论你做什么)上,你都可以触发这个委托方法。

希望这可以帮助

于 2012-06-23T05:46:39.013 回答