我在 UITextField
中有多个 UIView
。我在用户开始使用 textFieldShouldBeginEditing:
编辑字段之前更改了视图布局,然后通过 textFieldDidEndEditing:
恢复它。
e.g。
- (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:
然后我可以在textFieldShouldBeginEditing:
keyboardWillShow:
内完成需要完成的工作。但由于我无法像UITextField
和textFieldShouldBeginEditing:
那样获得当前的 textFieldDidEndEditing:
,因此我无法正确进行必要的更新。
我知道我可以设置另一个变量来跟踪当前的编辑状态,但有没有更好的方法可以确保 UITextField
在切换之前结束编辑?
答案 0 :(得分:1)
您是否尝试过为文本字段分配标记,然后根据该标记创建逻辑?
UITextField *yourTextField = (UITextField *)[self.view viewWithTag:result];