我不确定我做错了什么,但这里有一个简化的例子:
@interface Test : NSObject<UIGestureRecognizerDelegate> {
UIView *_someParentView;
UIView *_someChildView;
}
- (id)initWithParentView:(UIView *)parentView;
@end
@implementation Test
- (id)initWithParentView:(UIView *)parentView
{
if (self = [super init])
{
_someParentView = parentView;
}
return self;
}
- (void)addSubViewsWhenReady
{
_someChildView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
_someChildView.backgroundColor = [UIColor blackColor];
[_someChildView setUserInteractionEnabled:YES];
[_someParentView addSubview:_someChildView];
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
singleFingerTap.delegate = self;
[_someChildView addGestureRecognizer:singleFingerTap];
}
- (void)handleSingleTap:(id)sender
{
NSLog(@"handle the single tap");
}
@end输出:“处理单击”永远不会被记录下来。你知道我做错了什么吗?
谢谢!
发布于 2013-12-30 08:24:36
像你这样设定目标:
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];是你的问题。如果这里的"self“是一个UIViewController,它将会工作。
即
@interface Test : UIViewController<UIGestureRecognizerDelegate> {
UIView *_someParentView;
UIView *_someChildView;
}
- (id)initWithParentView:(UIView *)parentView;
@end
@implementation Test
- (id)initWithParentView:(UIView *)parentView
{
if (self = [super init])
{
_someParentView = parentView;
}
return self;
}
- (void)addSubViewsWhenReady
{
_someChildView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
_someChildView.backgroundColor = [UIColor blackColor];
[_someChildView setUserInteractionEnabled:YES];
[_someParentView addSubview:_someChildView];
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
singleFingerTap.delegate = self;
[_someChildView addGestureRecognizer:singleFingerTap];
}
- (void)handleSingleTap:(UIGestureRecognizer*)recognizer {
NSLog(@"handle the single tap");
}
@end发布于 2013-04-14 08:41:36
尝试将handleSingleTap:的定义更改为
- (void)handleSingleTap:(UIGestureRecognizer*)recognizer {
NSLog(@"handle the single tap");
}从UIGestureRecognizer文档中:
手势识别器有一个或多个与之关联的目标-动作对。如果有多个目标-动作对,则它们是离散的,而不是累积的。对手势的识别导致向这些对中的每一个的目标发送动作消息。调用的操作方法必须符合以下签名之一:
- (void)handleGesture;
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;
https://stackoverflow.com/questions/15994386
复制相似问题