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、1 つのパラメーターのみを取ることができます。このパラメーターは、それ自体であるか、パラメーターなしです。この質問を確認してください。
あなたの「言語」は一定の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
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(setLanguage:@"en":tap)]

構文を使用する場合、@selector()パラメーターを渡すことはできません。@selector指定された署名に一致するメソッドを実行時にテーブル全体で検索するマクロであるため、括弧内に引数を渡すことはあまり良い考えではありません:-)
使用する必要があります

@selector(setLanguage::) 

次に、それがどのようUIGesture Recognizersに作られているかという理由で、アクションとして提供するメソッドは、0 または 1 つのパラメーターを受け入れなければなりません。それ以上ではありません! メソッドが 1 つのパラメーターを受け入れる場合、自動的にトリガーされたジェスチャ認識エンジンが渡されます。

したがって、あなたの状況では、liuyaodong のアドバイスのように、tapHandling メソッドを次のように変更します。

- (void)tapped:(UITapGestureRecognizer *)gesture

このメソッドの本体では、言語を理解する必要があります。

乾杯、

于 2013-08-08T10:50:40.873 に答える
0

2 番目のパラメーターの名前がありません。これは -(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 に答える