我的程序基本上是这样的:
UIViewController - >自定义UIView - > [UIImageView数组]
我的问题是我的识别器的动作方法永远不会被调用。我已经将我的UIImageViews的userInteractionEnabled属性设置为YES。
在我的View Controller的viewDidLoad:
上- (void)viewDidLoad
{
NSEnumerator *enumerator = [grid.subviews objectEnumerator];
UIImageView *view;
UITapGestureRecognizer *recognizer;
while((view = [enumerator nextObject])){
recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openDeal:)];
view.userInteractionEnabled = YES;
recognizer.delegate = self;
recognizer.numberOfTapsRequired = 1;
[view addGestureRecognizer:recognizer];
NSLog(@"%d", (int)view.userInteractionEnabled);
[recognizer release];
}
[super viewDidLoad];
}
和openDeal定义如下:
-(void) openDeal:(UITapGestureRecognizer *) recognizer{
NSLog(@"%@",[NSString stringWithFormat:@"%d", recognizer.view.tag]);
}
答案 0 :(得分:3)
我遇到了同样的问题,后来发现我正在为另一个视图分配相同的手势识别器实例。手势识别器只能与单个视图相关联(您可以通过UIGestureRecognizer的视图属性验证)。
确保您不会在代码中的其他位置重复使用识别器。
答案 1 :(得分:1)
我刚遇到同样的问题。
首先,检查view属性。如果在addGestureRecognizer之后它为null,则它不起作用。
我删除了对委托属性的赋值后解决了我的问题。
所以代码如下:
{
UITapGestureRecognizer *bmSingleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(bmSingleTap:)];
bmSingleTap.numberOfTapsRequired = 1;
//bmSingleTap.delegate = self;
[bookmarkTapArea addGestureRecognizer:bmSingleTap];
NSLog(@"tap: %@ %i", bmSingleTap.view, bmSingleTap.enabled);
}
编辑:顺便说一句,后来我想重现这个bmSingleTap.view == nil效果而不能。也许,干净的重建可以解决问题。
答案 2 :(得分:0)
第一个想法: 将您的方法更改为:
-(void) openDeal:(UIGestureRecognizer *) recognizer{
NSLog(@"%@",[NSString stringWithFormat:@"%d", recognizer.view.tag]);
}
答案 3 :(得分:0)
您的while
方法看起来很奇怪?你确定它在运行吗?
尝试按照以下方式枚举子视图数组,看看它是否有帮助......
NSArray *subviewsArray = grid.subviews;
for (id imageView in subviewsArray)
{
if ([imageView isKindOfClass:[UIImageView class]])
{
// run your code here
}
}