1

以前曾以某种形式提出过这个问题,但我找不到适用于我情况的答案。

简而言之:我正在为我的应用程序构建一个画廊模块。它由几个部分组成,每个部分中有许多缩略图。基本原则是图像查看器模块根据用户所在的部分以及他或她点击的缩略图以模态方式启动和呈现。看起来很简单;我所需要的只是在图像查看器初始化时传递两个 int 变量(一个用于部分,一个用于图像),一切都是 hunky-dory。

问题是 UITapGestureRecognizer 不能直接调用方法。它使用选择器,我无法通过它传递参数,更不用说两个了。我正在寻找的是这样的:

[thumbnail004 setUserInteractionEnabled:YES];
UITapGestureRecognizer *tap004 = [[UITapGestureRecognizer alloc] 
                       initWithTarget:self
                       action:@selector(imageTappedWithSectionNumber:6
                                                      andImageNumber:4)];
[thumbnail004 addGestureRecognizer:tap004];

使用 UITapGestureRecognizer 时,有没有办法直接使用参数调用方法?

如果没有,解决此问题的一种明显方法是为每个图像点击创建单独的方法,例如:

- (void) image1_1Tapped { 
  // View initialization by passing 1 and 1
  }
- (void) image1_2Tapped { 
  // View initialization by passing 1 and 2
  }
And so on...

这是可能的,因为图像库不是动态的,但是,它将是世界上最丑陋的代码,我想不惜一切代价避免它。

必须有一种方法可以使用干净优雅的代码来做到这一点......!

供进一步参考: 1.我不使用IB;我以编程方式做所有事情。2.传递一个参数是不够的;我真的需要通过两个。

4

2 回答 2

9

associated object一起使用pass argument_tap gesture instance.

请参阅objective-c-associated-objects链接。

于 2012-12-31T11:45:21.937 回答
4

手势识别器只会将一个参数传递给动作选择器:它自己。我假设您正在尝试区分对主视图的各种图像子视图的点击?在这种情况下,最好的办法是调用 -locationInView:,传递超级视图,然后在该视图上调用 -hitTest:withEvent: 并生成 CGPoint。

于 2012-12-31T11:44:04.693 回答