如何找出 UITextField 结束编辑的原因?
How to find out why a UITextField ended editing?
我有一个可以设置为编辑模式的UITextField
。
通常情况下,通过在键盘上输入“完成”来结束编辑。
这会调用 textFieldDidEndEditing(_ textField: UITextField)
,其中会发生一些内务处理。
但是,在极少数情况下,会显示用户进入地理围栏的警报。如果文本字段随后处于编辑模式,它会放弃第一响应者状态,因为警报视图成为第一响应者,并且 textFieldDidEndEditing(_ textField: UITextField)
也会被调用。解除警报后,将恢复文本字段的第一响应者状态。
问题:
我必须区分这两种情况:
如果文本字段由于键盘上的完成而结束编辑,则应该进行内务处理。
如果因为显示警报而结束编辑,则不得进行内务处理。
那么,我怎样才能区分这两种情况呢?
我尝试使用委托函数
textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason)
其中 reason
可能是 cancelled
或 committed
,这两种情况的原因都是 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
}
我有一个可以设置为编辑模式的UITextField
。
通常情况下,通过在键盘上输入“完成”来结束编辑。
这会调用 textFieldDidEndEditing(_ textField: UITextField)
,其中会发生一些内务处理。
但是,在极少数情况下,会显示用户进入地理围栏的警报。如果文本字段随后处于编辑模式,它会放弃第一响应者状态,因为警报视图成为第一响应者,并且 textFieldDidEndEditing(_ textField: UITextField)
也会被调用。解除警报后,将恢复文本字段的第一响应者状态。
问题:
我必须区分这两种情况:
如果文本字段由于键盘上的完成而结束编辑,则应该进行内务处理。
如果因为显示警报而结束编辑,则不得进行内务处理。
那么,我怎样才能区分这两种情况呢?
我尝试使用委托函数
textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason)
其中 reason
可能是 cancelled
或 committed
,这两种情况的原因都是 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
}