2

私は3つのテキストフィールドを持っています。

vacDate
vacTime
vacType

vacDateまたはをクリックするvacTimeと、 datepicker が表示されmyDatePickerます。

また、どこかをクリックすると、すべてのキーボードと日付ピッカーを非表示にする hideAllKeyboards を呼び出します。

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    NSLog(@"textFieldDidBeginEditing===%@" , textField.text);
    CGAffineTransform translation = CGAffineTransformIdentity;

    myDatePicker.hidden = YES;
    if (textField==vacDate || textField==vacTime) {
        [vacDate resignFirstResponder];
        [vacTime resignFirstResponder];
        [vacType resignFirstResponder];
        myDatePicker.hidden = NO;
    }


    if (textField==vacType) {
        translation = CGAffineTransformMakeTranslation(0, -60);
    }

    [UIView beginAnimations:nil context:nil];
    self.view.transform = translation;
    [UIView commitAnimations];
}

-(IBAction)hideAllKeyboards {
    NSLog(@"hideAllKeyboards...");
    [vacDate resignFirstResponder];
    [vacTime resignFirstResponder];
    [vacType resignFirstResponder];
    myDatePicker.hidden = YES;

    NSLog(@"my date data is %@", myDatePicker.date);

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSString *strDate = [dateFormatter stringFromDate:[myDatePicker date]];
    NSLog(@"my date is ::: %@", strDate);
    vacDate.text = strDate;

    dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"hh mm a"];
    strDate = [dateFormatter stringFromDate:[myDatePicker date]];
    NSLog(@"my date is ==%@==", strDate);
    strDate = [strDate stringByReplacingOccurrencesOfString:@" " withString:@":"];
    strDate = [strDate stringByReplacingOccurrencesOfString:@":A" withString:@" A"];
    strDate = [strDate stringByReplacingOccurrencesOfString:@":P" withString:@" P"];
    vacTime.text = strDate;


    [UIView beginAnimations:nil context:nil];
    self.view.transform = CGAffineTransformIdentity;
    [UIView commitAnimations];

}

以下は私がやっていることです。

vacDate をタップし、時間を設定します。時間を設定したら、任意の場所をタップします。日付と時刻は、vacDate と vacTime に設定されます。ここで、vacType に移動してテキストを入力し、[完了] をクリックします。これで、すべてのキーボードが非表示になりました。

ここで再び vacType をクリックします。キーボードが表示されます (デフォルト)。ここで、vacDate または vacTime をクリックします。ここでは、最初のステップで発生したように datepicker を表示することを期待していましたが、デフォルトのキーボードが表示されます

rejectFirstResponder がすべてのキーボードで機能しない理由を考えてください。キーボードは rejectFirstResponder を呼び出さないため、datepicker を確認できません。


編集 1

私が持っているコードでは、vacType を入力してから vacDate または vacTime に戻ると、datepicker の上部が表示されますが、デフォルトのキーボードは非表示になっていないことに気付きました。デフォルトのキーボードがまだ表示されます。このキーボードを強制的に隠したい。

4

2 に答える 2

6

what about using endEditing to hide your keyboard instead of resignFirstResponder:-

[self.view endEditing:YES];

EDIT

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { {
    NSLog(@"textFieldDidBeginEditing===%@" , textField.text);
    CGAffineTransform translation = CGAffineTransformIdentity;


    if (textField==vacDate || textField==vacTime) {
        [self.view endEditing:YES];

        [UIView beginAnimations:nil context:nil];
        self.view.transform = translation;
        [UIView commitAnimations];
        myDatePicker.hidden = NO;
        return NO;
    }
    else
    { 

         if (textField==vacType) {
           translation = CGAffineTransformMakeTranslation(0, -60);
         }
    [UIView beginAnimations:nil context:nil];
    self.view.transform = translation;
    [UIView commitAnimations];
    myDatePicker.hidden = YES;
     return YES;
    }

}

NOTE:-

instead of checking Textfiled like if (textField==vacType) use Tag while use UITextfiled in UI or programatically. This is the better option for checking which text filed you are editing. like if(textfiled.tag==1)

DEMO link

于 2013-07-27T18:53:40.947 に答える
1

私がしたことは、vacDate と vacTime がクリックされたときにデフォルトのキーボードが表示されなかったことです。

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField {
    [UIView beginAnimations:nil context:nil];
    self.view.transform = CGAffineTransformIdentity;
    [UIView commitAnimations];

    if (textField==vacType) {
        [textField resignFirstResponder];
        return YES;
    } else {
        [self.view endEditing:YES];
        myDatePicker.hidden = NO;
        return NO;
    }
}

これは私の問題を解決しました...

于 2013-07-27T19:42:40.373 に答える