0

我想知道如何在 Xcode中使用 aNSString和 a作为方法参数。UITapGestureRecoginzer现在我有这个代码:

-(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

4 回答 4

2

的动作UITapGestureRecognizer只能带一个参数,可以是本身也可以不带参数。请查看此问题
我发现你的“语言”是一个常数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"];
}
于 2013-08-08T10:27:59.063 回答
0

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

于 2013-08-08T10:12:34.310 回答
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"];
}
于 2013-08-08T10:16:46.170 回答
0
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(setLanguage:@"en":tap)]

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

@selector(setLanguage::) 

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

因此,在您的情况下,就像刘耀东建议的那样,将您的 tapHandling 方法更改为类似

- (void)tapped:(UITapGestureRecognizer *)gesture

在这个方法的主体中,你必须弄清楚语言。

干杯,

于 2013-08-08T10:50:40.873 回答