如何使用选择器将多个参数传递给UITapGesture方法

时间:2014-10-22 06:18:42

标签: ios objective-c selector

试图弄清楚如何将字符串参数传递给我使用选择器调用的方法。它也恰好是我为回应单个Tap手势而编写的方法

我的方法如下:

-(void)handleSingleTap:(UITapGestureRecognizer *)recognizer Mystring:(NSString *) TheString{
}

我试图像这样调用这个方法:

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];

现在我的通话不包括我要传递的第二个NSString参数。如何传递第二个参数?谢谢你。

2 个答案:

答案 0 :(得分:1)

为UITapGestureRecognizer创建类别以使用objc_setAssociatedObject

添加以下类别:

#import <objc/runtime.h> 

static const void *stringKey = &stringKey;

@implementation UITapGestureRecognizer (string)

- (void)setString:(NSString *)stringToBePassedInGesture
{
   objc_setAssociatedObject(self, stringKey, stringToBePassedInGesture, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)string
{
  return objc_getAssociatedObject(self, stringKey);
}

@end

像这样使用:

[singleTapGestureRecognizer setString:yourStringHere];

here

的更多参考资料

答案 1 :(得分:0)

我不知道你来自哪种语言(如果有的话),但它在Objective-C中不起作用。您创建的对象具有特定范围,并且可以拥有各种所有者。这意味着如果您在方法viewDidLoad中创建了一个对象(您的字符串),您只能在该方法中使用它,除非您使用已提到的属性将其分配给某个对象(例如self) 。我建议你尝试在网上搜索创建其中一个。

在你的情况下,如果调用对象可以将你的字符串存储为属性,然后可以在处理程序方法中使用,那将是很好的。这意味着您将字符串分配给点按手势gesture.myString = myString,然后在处理程序中您可以调用recognizer.myString来获取此字符串。这实际上可以通过对手势识别器进行子类化并在其上创建该属性来实现,但我不建议做这样的事情只是为了传递一个字符串。

所以一般情况下,你不能这样做的好方法,并相信我,我希望它是可能的,因为同样的问题可能变得非常困难的情况,例如向表格视图单元格添加按钮。通用句柄是非常有限的,使用或多或少的任何东西,如按钮,单元格,手势识别器,你不能期望得到更多信息,然后发送者本身(有时甚至不像索引路径)。