1

私は、二次方程式を解くためのかなり単純な iPhone アプリに取り組んでいます。これは主に、少なくとも概念と数学が非常に簡単だからです。

Interface Builder で、2 つのラベル、3 つのテキスト フィールド (varAfield など)、および [解決] ボタンを持つインターフェイスを作成しました。UITextFieldDelegate として設定された 3 つのテキスト フィールドは、「数字と句読点」キーボードが自動的に表示されるように設定されています。このコードは、キーボードを閉じるために使用され、ユーザーがリターン キーをタップすると、自動的に次の変数に移動します (「完了」と表示されている変数 C を除いて、「次へ」と表示されています)。

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == varAfield) {
    [varAfield resignFirstResponder];
    [varBfield becomeFirstResponder];
}
if (theTextField == varBfield) {
    [varBfield resignFirstResponder];
    [varCfield becomeFirstResponder];
}
if (theTextField == varCfield) {
    [varCfield  resignFirstResponder];
}
return YES;
}

いずれにせよ、becomeFirstResponder の最初のインスタンスで問題が発生します。キーボードは正常に表示されますが、「Numbers and Punctuation」の代わりに ASCII キーボードが使用されています。また、変数 A から再度開始すると、正常に動作します。アプリ内で最初に (そして最初に) 呼び出された becomeFirstResponder の最初のインスタンスをどこに移動しても、正しく動作しません。

更新:becomeFirstResponderは(最初のインスタンスでも)リターンキーの選択を尊重しますが、どのキーボードが設定されていても、「ASCII Capable」が表示されます。どうしたの?IBですべてを確認しましたが、問題ないようです...

4

2 に答える 2

4

これはシミュレーターではなく、デバイスでのみ発生することを確認できます。この動作は、v2.2.1、3.0、および 3.1 で再現できます。

大量のテキスト フィールドがあり、上記の例に示すように textFieldShouldReturn で becomeFirstResponder を呼び出してそれらを連結し、すべてのフィールドがキーボード タイプ UIKeyboardTypeNumbersAndPunctuation に設定されている場合、SECOND フィールドごとにキーボードが UIKeyboardTypeASCIICapable に変更されます。

setKeyboardType:UIKeyboardTypeNumbersAndPunctuation を明示的に入れてみましたが、違いはありません。

プログラムで becomeFirstResponder を呼び出した場合にのみ発生することに注意してください。ユーザーがテキスト フィールドを直接クリックすると、キーボードが正しく表示されます。

さらに興味深いことに、デバッガーで keyboardType プロパティを見ると、インターフェイスに ASCII キーボードが表示されていても、まだ UIKeyboardTypeNumbersAndPunctuation に設定されています。

これが発生する理由は、ASCII キーパッドと数字キーパッドが同じビューの異なるモードであるためです。

キーパッドの「next」/「return」キーのデフォルトのアクションには、数字ビューからアルファベット ビューへのスワップが含まれており、これがここで起こっていることです。

修正: textFieldShouldReturn から NO を返して、既定の動作が発生しないようにします。

于 2009-10-06T00:44:08.733 に答える
0

最初に他のビューで becomeFirstResponder を呼び出してみたので、テキストフィールドで呼び出したのは初めてではありませんか?

ちなみに、最初の 2 つの rejectFirstResponder は冗長です。それらが原因でバグが明らかになる可能性さえあります。

于 2009-07-31T19:21:46.260 に答える