NSString和UITapGestureRecognizer作为方法参数

时间:2013-08-08 10:07:09

标签: objective-c cocoa-touch nsstring uitapgesturerecognizer

我想知道如何在Xcode中使用NSStringUITapGestureRecoginzer作为方法参数。 现在我有了这段代码:

-(void)setLanguage:(NSString *)language :(UITapGestureRecognizer *)gesture {
    gesture.view.alpha = 0.8;
    [[NSUserDefaults standardUserDefaults] setValue:language forKey:@"GameLanguage"];
}

这适用于UITapGestureRecognizer

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(setLanguage:@"en":tap)];
    [ENImage addGestureRecognizer:tap];

当我以这种方式尝试时,我只会遇到错误。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

UITapGestureRecognizer的动作只能接受一个参数,这个参数本身或没有参数。请查看this question 我发现你的“语言”是一个常数NSString“en”,为什么不试试这个:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[ENImage addGestureRecognizer:tap];

-tapped:

- (void)tapped:(UITapGestureRecognizer *)gesture
{
    gesture.view.alpha = 0.8;
    // Or you can call your custom method like [self setLanguage:@"en"]
    [[NSUserDefaults standardUserDefaults] setValue:@"en" forKey:@"GameLanguage"];
}

答案 1 :(得分:0)

您缺少第二个参数的名称 -(void) setLanguage:(NSString *)language withGesture:(UITapGestureRecognizer *)gesture是正确的签名

答案 2 :(得分:0)

试试这个:

使用以下行替换您的手势分配编码

NSString *strLanguage = @"en";
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(setLanguage:strLanguage:)];
[ENImage addGestureRecognizer:tap];

并使用以下代码替换您的setLanguage方法

-(void)setLanguage : (NSString *) language : (id)sender {
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;
    gesture.view.alpha = 0.8;
    [[NSUserDefaults standardUserDefaults] setValue:language forKey:@"GameLanguage"];
}

答案 3 :(得分:0)

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(setLanguage:@"en":tap)]

使用@selector()语法时,无法传递参数。 @selector是一个宏,它将在运行时在表中搜索与给定签名匹配的方法,因此在括号内传递参数不是一个好主意:-)
 你应该使用

@selector(setLanguage::) 

然后,因为UIGesture Recognizers是如何制作的,你提供的动作方法必须接受0或1个参数,而不是更多!如果你的方法接受1个参数,AUTOMATICLY它将是将被传递的触发手势识别器。

所以,在你的情况下,像liuyaodong一样建议,将你的tapHandling方法更改为

- (void)tapped:(UITapGestureRecognizer *)gesture

在这个方法的正文中,你必须找出语言。

干杯,