1

キーボードの種類がテンキーであるテキストフィールドがあります。

私は以前、この方法を使用していましたが、これは私のビューのどこにでも触れることに関連していました。接続はxibファイルで行われました。問題なく動作しました。

-(IBAction)closeKeypad:(id)sender
{


[textField1 resignFirstResponder];
[textField2 resignFirstResponder];

}

次に、ユーザーが入力できる値に制限を設ける必要がありました(最大100)。

私は次のようになりました。

- (void)textFieldDidEndEditing:(UITextField *)textField {

    //if value is greater than 100, display error message//
    int integer = [textField.text intValue]; //convert value into integer//




    if (integer > 100) {

    UIAlertView *tooHigh = [[UIAlertView alloc] initWithTitle:@"Invalid" message:@"Number    cannot be over 100" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];


    [tooHigh show];

}

今私は2つのものが必要です

1)ユーザーが100を超える数字を入力すると、テキストフィールドがクリアされ、キーボードはそのテキストフィールドに留まります。

2)背景に触れたときにキーボードを取り除く方法。コードベースのソリューションが必要だと思いますか?

以前の実装では、200と入力するとエラーが発生しましたが、キーボードが閉じて200がテキストフィールドに表示されました。

ありがとう!

4

2 に答える 2

1

数値フォーマッタが必要です。まず、数値フォーマッタを割り当てて、そのメインプロパティを設定します。

@property (nonatomic,strong) NSNUmberFormatter* formatter;

実装では:

self.formatter=[NSNUmberFormatter new];
formatter.numberStyle= NSNumberFormatterDecimalStyle;
formatter.maximum= @100;

それで :

- (void)textFieldDidEndEditing:(UITextField *)textField 
{
    NSNumber* value;
    BOOL correct=[formatter getObjectValue: &value forString: self.textField.text errorDescription: nil];
    if(!correct)
    {
        self.textField.text= @""; // clear text
    }
}

2番目の部分については、ViewControllerでユーザーインタラクションを有効にします。

self.view.userInteractionEnabled= YES;

次に、このメソッドを実装します。

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

ファーストレスポンダーになれないビューがタッチされた場合にのみ通知が届くので、テキストフィールドのファーストレスポンダーを辞任します。

if(textField.isFirstResponder)
    [textField resignFirstResponder];
于 2012-12-23T16:34:34.397 に答える
0

ソフトキーボードを閉じる限り、ビューのView Controllerクラス内から、次のメッセージをビューに送信できます。これにより、キーボードが閉じられます。

[self.view endEditing:YES];

ユーザーが背景に触れたときにこれを起動する1つの方法は、ビューにタップイベントを追加し、上記のメッセージをタップジェスチャイベントハンドラーに配置することです。

于 2012-12-23T19:25:06.067 に答える