我正在使用 UINavigationController 来推送多个视图控制器。在某一时刻,用户可以使用密码自动填充来设置新密码。密码也被添加到父视图控制器的文本字段中。
查看控制器堆栈
UINavigationController -> View Controller A -> View Controller B -> View Controller C
视图控制器 A 有两个用于电子邮件/密码的字段,类型为 UITextField。
视图控制器 B 有一个用于电子邮件的字段,类型为 UITextField。
视图控制器 C 有两个用于密码/确认密码的字段,类型为 UITextField。
问题
当在视图控制器 C 中重置密码时,视图控制器被弹出,我在委托函数func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
中观察到新密码被插入到视图控制器 B 的电子邮件字段和视图控制器 A 的电子邮件字段中。导致输入字段的值类似于bob@company.comNEWLY-MADE-PASSWORD
。为什么密码首先被插入到 UITextField.textContentType = .emailAddress
中,这也让我感到困惑。
为什么密码自动填充试图智能并将新密码插入父视图控制器的字段?这对我来说有点头疼,导致在委托函数中进行一些不可靠的检查以拒绝插入密码。
回应 El Tomato 的评论:Apple 在他们的文档中使用“弹出”这个词来描述当你打电话时发生的事情popViewController(animated:)
。
没有显示视图控制器。它们都被推送到UINavigationController管理的堆栈中,如标题 -> 中所述View controller stack
。
没有相关代码,Password AutoFill 是通过对开发者隐藏的启发式方法解决的,这是 Apple 的内置功能。