多个UITextField:textFieldShouldBeginEditing:/ textFieldDidEndEditing:订购

时间:2016-03-10 10:30:02

标签: ios objective-c iphone uitextfield uitextfielddelegate

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

  1. 另一个 UITextField textFieldShouldBeginEditing:
  2. 当前 UITextField textFieldDidEndEditing:
  3. 又称控制台日志:

    textFieldShouldBeginEditing:
    textFieldDidEndEditing:
    

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

    如果我将KVO风格的观察者添加到 UIKeyboardWillShowNotification / UIKeyboardWillHideNotification ,则订单将为:

    textFieldShouldBeginEditing:
    keyboardWillShow:
    textFieldShouldBeginEditing:
    textFieldDidEndEditing:
    keyboardWillShow:
    

    然后我可以在textFieldShouldBeginEditing: keyboardWillShow:内完成需要完成的工作。但由于我无法像UITextFieldtextFieldShouldBeginEditing:那样获得当前的 textFieldDidEndEditing: ,因此我无法正确进行必要的更新。

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

1 个答案:

答案 0 :(得分:1)

您是否尝试过为文本字段分配标记,然后根据该标记创建逻辑?

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