UIScrollView中的iOS Tap手势

7

我有一个RootViewController,并且它关联了一个nibxib文件。这个nib在应用程序启动时被加载。这个nib文件中包含一个UIScrollView,在这个scrollview中,我放置了另一个自定义生成的nib - newNib.xib文件。

在这个newNib.xib中,我在界面构建器中进行了更改,以响应RootViewController,即自定义类 - RootViewController。然后,我链接了一些在RootViewController中创建的UIView对象。到目前为止都很好...

我在RootViewController中定义了一些tapGestureRecognisers,在newNib.xib中定义的UIViews上,但它们没有响应触摸事件。我像这样在RootViewController中定义了Tap Events -

UITapGestureRecognizer *messagesTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(messagesBucketTap:)];
[messagesTap setNumberOfTapsRequired:1];
[messagesTap setNumberOfTouchesRequired:2];
[self.messagesSnippet addGestureRecognizer:messagesTap];
[messagesTap release];

这里的self.messagesSnippet出现在newNib.xib中。我像这样在RootViewController中加载xib-

[[NSBundle mainBundle] loadNibNamed:@"newNib" owner:self options:nil];

但是我仍然无法将tapGesture传递给选择器(messagesBucketTap)。我做错了什么?


你是否声明了被触发的方法 - (void)messagesBucketTap:(UITapGestureRecognizer *)gesture?而messagesSnippet又是什么? - Jamie
1个回答

6
最有可能的原因是您忘记设置点击手势识别器的委托,例如[messagesTap setDelegate:self]。
假设-messagesBucketTap:在同一个类中声明,请更改您的代码为:
    UITapGestureRecognizer *messagesTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(messagesBucketTap:)];
    [messagesTap setDelegate:self];
    [messagesTap setNumberOfTapsRequired:1];
    [messagesTap setNumberOfTouchesRequired:2];
    [self.messagesSnippet addGestureRecognizer:messagesTap];
    [messagesTap release];

如果这不起作用,请检查Jamie所说的内容,并确保你已经声明了:

- (void)messagesBucketTap:(UITapGestureRecognizer *)gestureRecognizer;

而不是

- (void)messagesBucketTap;

另外,您是否用两个手指轻触一次?最后,请确保 UIView 上的 userInteractionEnabledYES,并且 UIScrollView 上的 exclusiveTouchNO


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接