1

UITextField がトリガーされるチェックを実装しようとしています。以下は、最初の 2 つのテキスト フィールドのみに対する調査結果です。これにより、「送信者が宣言されていません」という2つのエラーが表示されます...どこが間違っていますか? よろしくお願いします プロパティと合成はOKです!val は、caLculator のボタンのタグ値です (0、1、2、3、4、5、6、7、8、9 など)。

//.h file

IBOutlet UITextField *textFieldLoanAmountDisplay;
IBOutlet UITextField *textFieldInitDepositDisplay;


// .m file

const NSString *textField1Code= @"1";
const NSString *textField2Code= @"2";


-(BOOL)textField1ShouldBeginEditing:(UITextField *)textFieldLoanAmountDisplay {
    if (textFieldLoanAmountDisplay == textField1Code) 
    {
        UIButton *buttonPressed = (UIButton *)sender;
        int val = buttonPressed.tag;
        if ( [textFieldLoanAmountDisplay.text compare:@"0"] == 0 ) {
            textFieldLoanAmountDisplay.text = [NSString stringWithFormat:@"%d", val ];
        } else {
            textFieldLoanAmountDisplay.text = [NSString stringWithFormat:@"%@%d", textFieldLoanAmountDisplay.text, val ];
        }
    }
    return NO;    
}

-(BOOL)textField2ShouldBeginEditing:(UITextField *)textFieldInitDepositDisplay {
    if (textFieldInitDepositDisplay == textField2Code) 
    {
        UIButton *buttonPressed = (UIButton *)sender;
        int val = buttonPressed.tag;
        if ( [textFieldInitDepositDisplay.text compare:@"0"] == 0 ) {
            textFieldInitDepositDisplay.text = [NSString stringWithFormat:@"%d", val ];
        } else {
            textFieldInitDepositDisplay.text = [NSString stringWithFormat:@"%@%d", textFieldInitDepositDisplay.text, val ];
        }
    }
    return NO;
}
4

2 に答える 2

2

問題が何であるかを実際に説明していませんが、コードを見るだけで、間違ったデリゲート メソッド名を使用しています。UITextField インスタンスごとに個別の textFieldShouldBeginEditing: は必要ありません。

ビュー コントローラー クラス インターフェイス ファイルで、次のように UITextFieldDelegate メソッドに準拠していることを宣言していることを確認してください。

@interface XXXXX : XXXXXX <UITextFieldDelegate>

次に、実装で使用します

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

また、上記のように異なるタグを使用して textField インスタンスをセットアップする場合は、switch ステートメントを使用して、どの textField がメソッドを呼び出しているかを確認します。

switch (textField.tag)
{
    case tagValue1:
    // Implement your logic here
    break;
    case tagValue2:
    // Implement your logic here
    break;
    ...
}
于 2011-03-15T22:24:31.297 に答える
0

UITextFieldDelegate プロトコルに正しく準拠します。次に、textFieldShouldBeginEditing が両方の UITextField によって呼び出されます。UITextfield はデリゲート パターンに依存するため、デリゲートによって特定のメソッドが実装されることを期待し、そのメソッドには正しい名前を付ける必要があります。使用しようとしているのは、たとえば UIButtons で使用されるターゲット アクション パターンです。

どちらが呼び出されたかを調べるには、メソッドに渡される UITextfield パラメータを使用できます。デリゲートを設定することを忘れないでください。

于 2011-03-15T22:13:30.713 に答える