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

Ios 如何使用选择器将多个参数传递给UITAPPostation方法,ios,objective-c,selector,Ios,Objective C,Selector,试图找出如何将字符串参数传递给我的方法,我使用选择器调用该方法。这也恰好是我写的一个方法,用来回应一个轻触手势 我的方法如下所示: -(void)handleSingleTap:(UITapGestureRecognizer *)recognizer Mystring:(NSString *) TheString{ } UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]init

试图找出如何将字符串参数传递给我的方法,我使用选择器调用该方法。这也恰好是我写的一个方法,用来回应一个轻触手势

我的方法如下所示:

-(void)handleSingleTap:(UITapGestureRecognizer *)recognizer Mystring:(NSString *) TheString{
}
UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];
我正在尝试这样调用该方法:

-(void)handleSingleTap:(UITapGestureRecognizer *)recognizer Mystring:(NSString *) TheString{
}
UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleSingleTap:)];

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

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

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

因此,一般来说,你不能用很好的方式做到这一点,相信我,我希望这是可能的,因为同样的问题可能会变得非常困难,例如在表格视图单元格中添加按钮。通用句柄非常有限,并且或多或少地使用按钮、单元格、手势识别器等任何东西,您无法期望获得比发送者本身更多的信息(有时甚至不像索引路径)。

为UITapgestureRecognitor创建类别以使用objc\u 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


更多来自

的参考,您希望字符串来自哪里?您不能完全按照自己的意愿执行操作,您必须将字符串保存到某个位置(可能是一个属性),然后从
handleSingleTap:
方法中访问它;Qstring=@“xyzxyz”;我正在尝试传递Qstring。该字符串在哪里声明?如果将其作为类的属性,则可以在手势处理程序中访问它。字符串在我的viewDidLoad方法中声明,我在这里调用handleSingleTap方法。