私は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 の上部が表示されますが、デフォルトのキーボードは非表示になっていないことに気付きました。デフォルトのキーボードがまだ表示されます。このキーボードを強制的に隠したい。