麻烦将手势识别到导航栏(Trouble applying gesture recognizer to

2019-09-18 10:17发布

在我的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]

不工作。

Answer 1:

为此,您需要继承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档 - 对手势识别的方法(无论你把它),你可以触发这个委托方法。

希望这可以帮助



Answer 2:

对于其他人查看此,这里是一个更简单的做到这一点的方式。

[self.navigationController.view addGestureRecognizer:oneFingerTwoTaps];


文章来源: Trouble applying gesture recognizer to navigationbar