我在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
答案 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