[英]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.