我在UITextField中有多个UIView。我先更改视图布局,然后用户开始使用textFieldShouldBeginEditing:编辑字段,然后通过textFieldDidEndEditing:还原它。

例如

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    NSLog(@"%s", __FUNCTION__);
    // Change UIView layout
    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    NSLog(@"%s", __FUNCTION__);
    // Restore UIView layout
}


但是,如果在编辑UITextField时单击另一个UITextField,则执行顺序为:


另一个UITextFieldtextFieldShouldBeginEditing:
当前UITextFieldtextFieldDidEndEditing:


又名控制台日志:

textFieldShouldBeginEditing:
textFieldDidEndEditing:


在这种情况下,UIView布局设置将不正确。我也尝试了textFieldShouldEndEditing:,但没有更改顺序。

如果我将KVO样式观察者添加到UIKeyboardWillShowNotification / UIKeyboardWillHideNotification,则顺序为:

textFieldShouldBeginEditing:
keyboardWillShow:
textFieldShouldBeginEditing:
textFieldDidEndEditing:
keyboardWillShow:


然后,我可以在textFieldShouldBeginEditing:keyboardWillShow:中执行所需的操作。但是由于无法像UITextFieldtextFieldShouldBeginEditing:那样获得当前的textFieldDidEndEditing:,因此我将无法正确进行必要的更新。

我知道我可以设置另一个变量来跟踪当前编辑状态,但是还有更好的方法来确保一个UITextField在切换之前结束编辑吗?

最佳答案

您是否尝试过为文本字段分配标签,然后根据其逻辑?

UITextField *yourTextField = (UITextField *)[self.view viewWithTag:result];

关于ios - 多个UITextField:textFieldShouldBeginEditing:/textFieldDidEndEditing:排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35913843/

10-14 01:30