我想知道如何在Xcode中使用NSString
和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];
当我以这种方式尝试时,我只会遇到错误。我该如何解决这个问题?
答案 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
在这个方法的正文中,你必须找出语言。
干杯,