在我的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]
不起作用。
答案 0 :(得分:8)
对于其他任何观看此内容的人来说,这是一种更为简单的方法。
[self.navigationController.view addGestureRecognizer:oneFingerTwoTaps];
答案 1 :(得分: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文件中 - 在手势识别方法上(无论你做什么),你可以触发这个委托方法。
希望这有帮助