我有三个 UITextField
UITextField1 <- 显示键盘
UITextField2 <- 显示键盘
UITextField3 <- 显示自定义输入 View (pickerView)
完成编辑 textField2 后,我单击键盘上的“下一步”,它隐藏了键盘但未显示选择器。
如果我完成编辑 textField2 并且没有关闭键盘并点击 textField3,则键盘不会隐藏并且选择器显示在键盘上方,那么除非我返回 textField2 并点击任何 textField 外部,否则键盘无法关闭。
片段:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
-(void) textFieldDidBeginEditing:(UITextField *)textField
{
if(textField == self.textField3){
// Close the keyboard.
[self.textField3 resignFirstResponder];
[self.view endEditing:YES];
ActionSheetDatePicker *picker;
NSString *fechaIni = [self.dates objectAtIndex:0];
NSString *fechaFin = [self.dates objectAtIndex:[self.dates count]-1];
NSDate *fechaMarcada;
if(self.fecha == nil){
fechaMarcada = [self fromDateString:fechaIni format:@"yyyyMMdd"];
}else{
fechaMarcada = self.fecha;
}
picker = [[ActionSheetDatePicker alloc] initWithTitle:@"Seleccione" datePickerMode:UIDatePickerModeDate selectedDate:fechaMarcada target:self action:@selector(datePickerValueChanged:) origin:textField cancelAction:nil];
[picker setMinimumDate:[self fromDateString:fechaIni format:@"yyyyMMdd"]];
[picker setMaximumDate:[self fromDateString:fechaFin format:@"yyyyMMdd"]];
[picker setDoneButton:[[UIBarButtonItem alloc] initWithTitle:@"Ok" style:UIBarButtonItemStylePlain target:nil action:nil]];
[picker setCancelButton:[[UIBarButtonItem alloc] initWithTitle:@"Cancelar" style:UIBarButtonItemStylePlain target:nil action:nil]];
[picker showActionSheetPicker];
self.textField3.inputView = picker.pickerView;
self.textField3.text = [Utils formatDate:[self formatDate:fechaMarcada]];
[Utils animateScreenUpByHalfKeyboardHeight:self.view];
}else if(textField == self.textField1){
if([self.currency.code isEqualToString:@"USD"]){
textField.keyboardType = UIKeyboardTypeDecimalPad;
}else{
textField.keyboardType = UIKeyboardTypeNumberPad;
}
}
}
在 textField3 中显示 pickerView 之前,如何在所有情况下关闭键盘?
根据 rmp 建议编辑
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[Utils navigationBarTitleAndSubtitle:self title:@"Title" subtitle:@"Subtitle"];
NSString *fechaIni = [self.dates objectAtIndex:0];
NSString *fechaFin = [self.dates objectAtIndex:[self.dates count]-1];
NSDate *fechaMarcada;
if(self.fecha == nil){
fechaMarcada = [self fromDateString:fechaIni format:@"yyyyMMdd"];
}else{
fechaMarcada = self.fecha;
}
self.picker = [[ActionSheetDatePicker alloc] initWithTitle:@"Seleccione" datePickerMode:UIDatePickerModeDate selectedDate:fechaMarcada target:self action:@selector(datePickerValueChanged:) origin:self.textField3 cancelAction:nil];
[self.picker setMinimumDate:[self fromDateString:fechaIni format:@"yyyyMMdd"]];
[self.picker setMaximumDate:[self fromDateString:fechaFin format:@"yyyyMMdd"]];
[self.picker setDoneButton:[[UIBarButtonItem alloc] initWithTitle:@"Ok" style:UIBarButtonItemStylePlain target:nil action:nil]];
[self.picker setCancelButton:[[UIBarButtonItem alloc] initWithTitle:@"Cancelar" style:UIBarButtonItemStylePlain target:nil action:nil]];
//[self.picker showActionSheetPicker];
self.textField3.inputView = self.picker.pickerView;
self.textField3.text = [Utils formatDate:[self formatDate:fechaMarcada]];
}
-(void) textFieldDidBeginEditing:(UITextField *)textField
{
if(textField == self.textField3){
// Close the keyboard.
// [self.view endEditing:YES];
[Utils animateScreenUpByHalfKeyboardHeight:self.view];
}else if(textField == self.textField1){
if([self.currency.code isEqualToString:@"USD"]){
textField.keyboardType = UIKeyboardTypeDecimalPad;
}else{
textField.keyboardType = UIKeyboardTypeNumberPad;
}
}
}
最佳答案
像这样添加一个手势识别器。确保将这个 UIGestureRecognizerDelegate 添加到你的类的顶部。
override func viewDidLoad() {
let tap1 = UITapGestureRecognizer(target: self, action: "dismissKeyboard")
self. UITextField1!.addGestureRecognizer(tap1)
tap1.delegate = self
}
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
func dismissKeyboard() {
self.view.endEditing(true)
}
关于ios - 使用自定义 inputView 点击 UITextField 时关闭键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29850069/