使用参数iphone / ipad处理轻击手势

时间:2012-07-03 19:04:56

标签: ios uitapgesturerecognizer

我的问题类似于this one,唯一的例外是 - 我的ImageView出现在窗口内的同一个地方,里面有不同的内容。内容具有唯一标识符,我想用它来调用特定于内容的操作。

为了快速回顾一下,这家伙正在寻找一种方法将参数传递给initWithTarget方法的selector部分。

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self  action:@selector(handleTapGesture:itemSKU:)];

如何将属性传递给handleTapGesture方法,或者如何读取唯一值?

任何想法都赞赏。

编辑:内容从数据库中提取,每次都不同。唯一标识符非常类似于SSN - 不再重复。

2 个答案:

答案 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:)];