2

現在のプロジェクトはcocos2dv2で実行されています。

CCLayerに単純なUITextFieldを追加しました。

ユーザーがtextFieldに触れるたびに、キーボードが表示されます。

次に、ユーザーが「戻る」ボタンをタッチすると、キーボードが消えて入力がクリアされます。

私がやろうとしたのは、ユーザーがUITextFieldの外のどこかに触れたときに同じことをすることです。

私は方法を見つけました、そしてそれは働きます:

- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
    UITouch* touch = [touches anyObject];
    if(touch.view.tag != kTAGTextField){
        [[[[CCDirector sharedDirector] view] viewWithTag:kTAGTextField] resignFirstResponder];
    }
}

ただし、このメソッドは関数を呼び出しません:

- (BOOL)textFieldShouldReturn:(UITextField *)textField

この関数を使用して、計算を行い、入力をクリアします。したがって、テキストフィールドが「resignFirstResponder」の場合、ccTouchesBeganにこのtextFieldShouldReturnを入力してもらいたいと思います。

4

2 に答える 2

4

Appleドキュメントから:

textFieldShouldReturn: テキストフィールドが戻るボタンの押下を処理する必要があるかどうかを代理人に尋ねます。

したがって、ユーザーが戻るボタンをタップしたときにのみ呼び出されます。

むしろ、計算と入力のクリアのためのメソッドを作成し、必要なときにいつでもそのメソッドを呼び出したいと思います。例:

- (void)calculateAndClearInput {
    // Do some calculations and clear the input.
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    // Call your calculation and clearing method.
    [self calculateAndClearInput];
    return YES;
}

- (void)ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    UITouch* touch = [touches anyObject];
    if (touch.view.tag != kTAGTextField) {
        [[[[CCDirector sharedDirector] view] viewWithTag:kTAGTextField] resignFirstResponder];
        // Call it here as well.
        [self calculateAndClearInput];
    }
}
于 2012-08-13T10:20:25.740 に答える
1

@matsrが提案したように、プログラムロジックの再編成を検討する必要があります。多くの場合、resignFirstResponderはそのメソッド内から呼び出されるためresignFirstResponder、UITextFieldでを呼び出すことは意味がありません。textFieldShouldReturn:(UITextField *)textFieldさらに、プログラムでを呼び出そうとしないでくださいtextFieldShouldReturn

代わりに、計算コードをコントローラーなどの新しいメソッドに移動し、UITextFieldtextFieldShouldReturnで呼び出すタッチを処理するときとその両方で呼び出すことをお勧めします。resignFirstResponder

これは、イベント処理コードを計算/ロジックコードから分離するのにも役立ちます。

于 2012-08-13T10:22:18.650 に答える