ios - 多个 UITextField : textFieldShouldBeginEditing:/textFieldDidEndEditing: Ordering

标签 ios objective-c iphone uitextfield uitextfielddelegate

我在 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,执行顺序将为:

  1. 另一个UITextFieldtextFieldShouldBeginEditing:
  2. 当前 UITextFieldtextFieldDidEndEditing:

又名控制台日志:

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/

相关文章:

android - 是否可以使用 Sencha Touch 2 构建相机 + 上传图片应用程序?

iOS IPA 重新打包/重新签名 App Store 应用程序

ios - 如何在 Swift 中使用 UIColorFromRGB?

objective-c - 如何在进入前景时保留 UIScrollView 的框架?

iphone - Objective-C 动态对象创建内存问题

iphone - Facebook graph api 注销不工作

ios - 如何检查设备是否可以调用电话(iOS 8)?

ios - 为什么将我的对象添加到NSMutableArray无法正常工作?

ios - xib 的 UIView 模糊

ios - 命令行构建一个没有开发团队的 iOS 示例项目