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

问题描述:

我有一个UITextField可以设置为编辑模式。如何找出UITextField结束编辑的原因?

正常情况下,通过在键盘上输入“完成”来结束编辑。 这称为textFieldDidEndEditing(_ textField: UITextField),在这里发生一些家务活动。

但是,在极少数情况下,会显示用户输入地理围栏的警报。如果文本字段处于编辑模式,则自从警报视图成为第一响应者以来,它将辞退第一响应者状态,并且还调用textFieldDidEndEditing(_ textField: UITextField)。当警报解除时,文本字段的第一响应者状态被恢复。

问题:
我必须区分两种情况:
如果文本字段结束,因为一个完成在键盘上编辑,管家应该发生。
如果因为显示警告而结束编辑,则不能进行家政服务。

那么,我该如何区分两种情况呢?

我试图使用委托函数

textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) 

其中reason可以是cancelledcommitted,无论是在这两种情况下的原因是committed

你可以使用textFieldShouldEndEditing并假设您可以识别地理围栏已被触发,返回false,这将留在编辑模式下的文本框,否则返回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 
}