以前曾以某种形式提出这个问题,但我找不到适合我情况的答案。
简而言之:我正在为我的应用程序构建一个库模块。它由几个部分组成,每个部分都有许多缩略图。基本原则是图像查看器模块基于用户所在的部分以及他或她所使用的缩略图来模态地呈现和呈现。似乎很简单;我需要的是在初始化图像查看器时传递两个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;我以编程方式做所有事情。 传递一个论点是不够的;我真的需要通过两个。
答案 0 :(得分:9)
associated object
与pass argument
一起使用tap gesture instance.
答案 1 :(得分:4)
手势识别器只会将一个参数传递给动作选择器:本身。我假设你试图区分主视图的各种图像子视图上的点击?在这种情况下,最好的办法是调用-locationInView:,传递superview,然后使用生成的CGPoint在该视图上调用-hitTest:withEvent :.