2

我有三个文本字段。

vacDate
vacTime
vacType

当我单击vacDateorvacTime时,我显示 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 ,但我看到了 default keyboard

知道为什么 resignFirstResponder 不能在所有键盘上工作。由于键盘不调用 resignFirstResponder,我无法看到 datepicker。


编辑 1

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

4

2 回答 2

6

如何使用endEditing隐藏键盘而不是resignFirstResponder:-

[self.view endEditing:YES];

编辑

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

}

笔记:-

而不是检查if (textField==vacType)Textfiled在 UI 中使用 UITextfiled 时使用 Tag 或以编程方式。这是检查您正在编辑的内容的更好选择。像if(textfiled.tag==1)text filed

演示链接

于 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 回答