什么时候会调用textFieldDidEndEditing:textField?

时间:2014-01-14 08:47:29

标签: ios objective-c

我在ViewController中有2个UITextField。一个调出一个UIDatePicker,另一个调出一个KeyBoard(数字键盘)。然后,我在以下方法中将用户输入分配给两个类变量,NSDate变量和NSNumber变量。

-(void)textFieldDidEndEditing:(UITextField *)textField{
    if (textField == self.datePickerTextField){
        //update xxtime
        self.xxTime = self.datePicker.date;
        NSLog(@"...%@",self.xxTime);
    }
     if (textField == self.numberTextField) {
        int val = [textField.text intValue];
        self.xxNumber = [NSNumber numberWithInt:val];
        NSLog(@"...%@",self.xxNumber);
    }

}

如果我首先点击datePickerTextField然后点击numberTextField,那么在我输入numberTextField后,将不会调用此方法。

所以我的问题是如何让这个方法被调用?我应该在某处指定“resignFirstResponder”吗?

TIA

3 个答案:

答案 0 :(得分:7)

一旦另一个控件获得焦点,它将调用didEndEditing

根据API

  

在文本字段重新启动其第一个响应者之后调用此方法   状态。

因此,如果您想调用didEndEditing,则需要调用

[textField resignFirstResponder];

答案 1 :(得分:2)

哟你是对的,你需要指定resignFirstResponder

- (BOOL)textFieldShouldReturn:(UITextField *)textField {//Text Field Delegate
    if (textField == textField1) {
        [textField1 becomeFirstResponder];
    }else{
        [textField resignFirstResponder];
    }
    return TRUE; }

这可以与textFieldDidEndEditing同时使用

答案 2 :(得分:1)

请检查您使用的iOS。请记住,如果您使用的是iOS 10,则有一种方法可替换名为func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason)的旧textFieldDidEndEditing