我在 UIView
中有多个 UITextField
。我在用户开始使用 textFieldShouldBeginEditing:
编辑字段之前更改 View 布局,然后通过 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
,执行顺序将为:
- 另一个
UITextField
的textFieldShouldBeginEditing:
。 - 当前
UITextField
的textFieldDidEndEditing:
。
又名控制台日志:
textFieldShouldBeginEditing:
textFieldDidEndEditing:
在这种情况下,UIView
布局设置将不正确。我还尝试了 textFieldShouldEndEditing:
但没有更改顺序。
如果我将 KVO 样式观察者添加到 UIKeyboardWillShowNotification
/UIKeyboardWillHideNotification
,顺序将为:
textFieldShouldBeginEditing:
keyboardWillShow:
textFieldShouldBeginEditing:
textFieldDidEndEditing:
keyboardWillShow:
然后我可以在 keyboardWillShow:
的 textFieldShouldBeginEditing:
中执行需要完成的操作。但由于我无法获取当前的 UITextField
(如 textFieldShouldBeginEditing:
和 textFieldDidEndEditing:
),我将无法正确地进行必要的更新。
我知道我可以设置另一个变量来跟踪当前编辑状态,但是有没有更好的方法来确保一个 UITextField
在切换之前结束编辑?
最佳答案
您是否尝试过为您的文本字段分配一个标签,然后将您的逻辑基于此?
UITextField *yourTextField = (UITextField *)[self.view viewWithTag:result];
关于ios - 多个 UITextField : textFieldShouldBeginEditing:/textFieldDidEndEditing: Ordering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35913843/