我的问题类似于this one,唯一的例外是 - 我的ImageView出现在窗口内的同一个地方,里面有不同的内容。内容具有唯一标识符,我想用它来调用特定于内容的操作。
为了快速回顾一下,这家伙正在寻找一种方法将参数传递给initWithTarget方法的selector部分。
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:itemSKU:)];
如何将属性传递给handleTapGesture方法,或者如何读取唯一值?
任何想法都赞赏。
编辑:内容从数据库中提取,每次都不同。唯一标识符非常类似于SSN - 不再重复。
答案 0 :(得分:7)
您可以使用内容标识符设置UIImageView
标记属性,然后从选择器中读取该信息。
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
[imageView addGestureRecognizer:tapGesture];
imageView.tag = 0;
然后:
- (void)handleTapGesture:(UITapGestureRecognizer *)sender
{
if( ((UIImageView *) sender.view).tag == 0 ) // Check the identifier
{
// Your code here
}
}
答案 1 :(得分:0)
尝试扩展UIImageView
并添加您需要的任何值(作为属性)和方法。
@interface UIImageViewWithId: UIImageView
@property int imageId;
@end
然后,如果你想要更加精彩,你可能想要将你的行为封装在这个“小部件”的实现中。这将使您的ViewController
保持良好和干净,并允许您在多个控制器中使用此小组件。
@implementation UIImageViewWithId
@synthesize imageId;
- (void)handleTapGesture:(UIGestureRecognizer *)gesture {
NSLog("Hey look! It's Id #%d", imageId);
}
@end
然后只需将点击委托给个人UIImageViewWithId
UIImageViewWithId *imageView = [[UIImageViewWithId ... ]]
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget: imageView action:@selector(handleTapGesture:)];