强迫UIView EndEditing无法按预期工作

时间:2011-10-03 20:05:11

标签: uiview

我在UIView中使用-(BOOL)endEditing:(BOOL)force方法来结束视图中文本字段的编辑,并发现了一些意外行为。

我创建了一个简单的测试程序,带有UITextField和两个UIButtons。一个按钮调用[self.view endEditing:YES]以强制编辑结束,而另一个按钮调用[self.view endEditing:NO]以结束编辑,而不强制。

File是textfield的委托,我在其中放了一个简单的日志语句 -(BOOL)textFieldShouldEndEditing:(UITextField *)textField方法。

以下是按钮和文本字段委托的代码:

-(IBAction)doEndEditingForced:(id)sender {
    NSLog(@"==========================");
    NSLog(@"In doEndEditingForced");
    [self.view endEditing:YES];
}

-(IBAction)doEndEditingNotForced:(id)sender {
    NSLog(@"==========================");
    NSLog(@"In doEndEditingNotForced");
    [self.view endEditing:NO];
}

-(BOOL)textFieldShouldEndEditing:(UITextField *)textField {
    NSLog(@"ShouldEndEditing");
    return YES;
}

这是我得到的输出:

2011-10-03 15:36:22.153 Test[94596:207] ==========================
2011-10-03 15:36:22.155 Test[94596:207] In doEndEditingForced
2011-10-03 15:36:22.156 Test[94596:207] ShouldEndEditing
2011-10-03 15:36:26.145 Test[94596:207] ==========================
2011-10-03 15:36:26.146 Test[94596:207] In doEndEditingNotForced
2011-10-03 15:36:26.147 Test[94596:207] ShouldEndEditing
2011-10-03 15:36:26.148 Test[94596:207] ShouldEndEditing

如果调用endEditingforce参数等于YES,为什么要调用textFieldShouldEndEditing方法,并且在调用endEditingforce参数等于NO,为什么textFieldShouldEndEditing方法被调用两次?

1 个答案:

答案 0 :(得分:2)

这是因为endEditing方法不会为您的UITextField或UITextView调用任何委托方法只是隐藏您视图中的键盘。