![](/img/trans.png)
[英]How do I disable my application from participating in the ⌘+tab cycle on macOS?
[英]How do I disable the password autofill in MacOS app
我的 MacOS 应用程序中有一个 NSSecureTextField 字段。 我想禁用密码自动填充按钮(“密码...”按钮)。 我在 iOS 看到过关于这样做的帖子,但在 Mac OS 上没有看到任何内容。 我怎样才能做到这一点? 谢谢
由于当前默认行为是在NSSecureTextField
的第一个 NSSecureTextField 上显示自动填充按钮,因此可以禁用密码自动填充。 但这是一个杂牌。
我发现如果您在关注的字段上方创建一个虚拟NSSecureTextField
并将其隐藏在另一个预先存在的字段后面,您可以避免出现自动填充按钮。 我用NSTextContentTypeOneTimeCode
设置了这个虚拟字段。
请注意,这仅在虚拟NSSecureTextField
位于关键视图循环中时才有效,因此将其隐藏或设置refusesFirstResponder
无济于事。 这也意味着您需要处理最终用户在字段之间切换的情况,以便跳过虚拟字段。
可以通过检测前一个字段( controlTextDidEndEditing:
)的编辑完成并当且仅当焦点在虚拟字段上时才更改焦点来实现焦点跳过。
对于可以通过适当的NSTextContentType
简单解决的事情来说,这有点复杂!
我同意亚历山大,请不要:)
但是,如果必须,它会停止提供自动填充功能,方法是将字段UITextContentType
值属性设置为.newPassword
或.oneTimeCode
,如此处所述。
是的,Michael Rourke 是对的——在 cocoa 应用程序中使用自动填充会导致很多问题。 例如,如果我开发了一个带有本机注册屏幕的应用程序,用户将看到自动填充提供程序建议现有密码而不是提供新密码。 这只是隐藏提供者的一种方法 - oneTimeCode。 但是用户可能会得到一个空的透明弹出窗口(我真的认为我们可以找到解决方法来隐藏它,例如使用 window.makeFirstResponder(textField)),这不是最大的问题。
对我来说,最大的问题是无法将新凭据保存到 icloud 钥匙串并将其与您的 web 域链接(但我可能错了:))。 在登录时在应用程序中创建密码而没有后续使用的可能性是很奇怪的。
我认为这是苹果没有向 Big Sure 添加新密码的原因 - 可能是他们在使用 cocoa 自动填充为钥匙串创建新记录时遇到了一些奇怪的问题。
在 Zeplin 应用程序中,人们使用本机登录和网站注册等解决方法 - 因此 safari 在钥匙串中创建记录,应用程序使用自动填充登录。
我很确定他们会在 mac os 的下一个版本中添加一个新密码,但是如果他们完全完成这个功能然后发布它会更好。 他们只是取消了在 Mac OS 的下一个版本中正常使用它的能力,因为以前的版本(如当前的 Big Sur)对它的支持很差。
PS如果用户有很多来自当前域的密码,并且他快速输入密码,那么提供者紧急断开连接的可能性很高(弹出)。
经过一些逆向工程,我发现以下子类将禁用自动填充行为:
@interface NoAutofillSecureTextField : NSSecureTextField
@end
@implementation NoAutofillSecureTextField
- (BOOL)_isPasswordAutofillEnabled
{
return NO;
}
@end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.