resignFirstResponder没有隐藏键盘

Fah*_*kar 2 objective-c datepicker uitextfield ios

我有三个文本域.

vacDate
vacTime
vacType
Run Code Online (Sandbox Code Playgroud)

当我点击vacDatevacTime,我显示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];

}
Run Code Online (Sandbox Code Playgroud)

以下是我正在做的事情.

点击vacDate然后设置时间.设置好时间后,点击任意位置.日期和时间在vacDate和vacTime中设置.现在我转到vacType并输入文本,然后单击"完成".现在所有的键盘都被隐藏了.

现在我再次点击vacType.现在我看到了键盘(默认).现在我点击vacDate或vacTime.在这里,我希望在第一步显示datepicker,但我看到默认键盘.

知道为什么resignFirstResponder不适用于所有键盘.由于键盘不调用resignFirstResponder,我无法看到datepicker.


编辑1

使用我的代码,我注意到当我输入vacType然后单击返回到vacDate或vacTime时,我看到了datepicker的上半部分,但默认键盘没有被隐藏.我仍然看到默认键盘.我想强有力地隐藏这个键盘.

Nit*_*hel 6

怎么用endEditing隐藏你的键盘而不是resignFirstResponder: -

[self.view endEditing:YES];
Run Code Online (Sandbox Code Playgroud)

编辑

-(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;
    }

}
Run Code Online (Sandbox Code Playgroud)

注意:-

而不是Textfiledif(textField == vacType)一样 检查在UI中使用UITextfiled或以编程方式使用Tag.这是检查text filed您正在编辑哪个的更好选项.喜欢if(textfiled.tag == 1)

DEMO链接