如何找出 UITextField 结束编辑的原因?

How to find out why a UITextField ended editing?

我有一个可以设置为编辑模式的UITextField

通常情况下,通过在键盘上输入“完成”来结束编辑。 这会调用 textFieldDidEndEditing(_ textField: UITextField),其中会发生一些内务处理。

但是,在极少数情况下,会显示用户进入地理围栏的警报。如果文本字段随后处于编辑模式,它会放弃第一响应者状态,因为警报视图成为第一响应者,并且 textFieldDidEndEditing(_ textField: UITextField) 也会被调用。解除警报后,将恢复文本字段的第一响应者状态。

问题:
我必须区分这两种情况:
如果文本字段由于键盘上的完成而结束编辑,则应该进行内务处理。
如果因为显示警报而结束编辑,则不得进行内务处理。

那么,我怎样才能区分这两种情况呢?

我尝试使用委托函数

textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason)

其中 reason 可能是 cancelledcommitted,这两种情况的原因都是 committed

您可以使用 textFieldShouldEndEditing 并假设您可以确定地理围栏已被触发,return false,这将使文本字段处于编辑模式,否则 return true,并且客房服务可以开始了

func textFieldShouldEndEditing(_ textField: UITextField) -> Bool
{
    // assuming you take the same action for all TextFields
    // assume geoFenceHasBeenTriggered is a class-variable true / false
    return !geoFenceHasBeenTriggered
}