如何找出UITextField结束编辑的原因?
问题描述:
我有一个UITextField
可以设置为编辑模式。如何找出UITextField结束编辑的原因?
正常情况下,通过在键盘上输入“完成”来结束编辑。 这称为textFieldDidEndEditing(_ textField: UITextField)
,在这里发生一些家务活动。
但是,在极少数情况下,会显示用户输入地理围栏的警报。如果文本字段处于编辑模式,则自从警报视图成为第一响应者以来,它将辞退第一响应者状态,并且还调用textFieldDidEndEditing(_ textField: UITextField)
。当警报解除时,文本字段的第一响应者状态被恢复。
问题:
我必须区分两种情况:
如果文本字段结束,因为一个完成在键盘上编辑,管家应该发生。
如果因为显示警告而结束编辑,则不能进行家政服务。
那么,我该如何区分两种情况呢?
我试图使用委托函数
textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason)
其中reason
可以是cancelled
或committed
,无论是在这两种情况下的原因是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
}