簡體   English   中英

防止文本字段中的自定義鍵盤

[英]Prevent custom keyboard in textfield

我正在試驗自定義鍵盤如何影響我的應用程序。 我在 iPhone 6 上安裝了 Swype。

我發現在我的某些視圖中,我在文本字段上設置了自定義 inputView 屬性,Swype 鍵盤覆蓋並呈現而不是我的選擇器。 這完全破壞了我的 UI 並且不能被允許。

有沒有辦法明確告訴 iOS 8 只使用我設置的 inputView?

這是一個錯誤,也許? 允許第三方覆蓋我的輸入規范完全不是預期的行為嗎?

您可以使用以下代碼為應用禁用自定義鍵盤:

在您的app委托中包含此內容:

- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier {
    if ([extensionPointIdentifier isEqualToString: UIApplicationKeyboardExtensionPointIdentifier]) {
        return NO;
    }
    return YES;
}

使用Pablo Ezequiel Romero的答案作為起點,我能夠讓事情適合我。 本質上,不是使用UIViewController作為自定義鍵盤,而是使用UIInputViewController並將控件放在UIInputViewControllerinputView 然后,分配inputView您的UITextFieldUITextViewinputView中的UIInputViewController

如果您正在使用自動布局,則需要確保正確設置所有內容並確保在inputView上設置初始高度約束並將其優先級設置為低於最大999級別(我使用800)。 任何高度都可以; 系統將用自己的約束替換你的約束。 較低的優先級避免了自動布局沖突。 (對我來說,如果我沒有包含這個約束,那么最終視圖根本不會有任何高度。)

當我完成所有這些操作后,我可以切換進出我的(應用內部)自定義鍵盤和任何第三方鍵盤擴展。

我有一個類似的問題,我能夠使用UIInputViewController修復它。 基本上我在inputView中設置的視圖是我的UIInputViewController子類的視圖。 我正在使用UIViewController,但在更換基本視圖控制器后,它開始運行良好。

斯威夫特4

  func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplicationExtensionPointIdentifier) -> Bool {
        if (extensionPointIdentifier == .keyboard) {
            return false
        }
        return true
    }

要阻止用戶對各個字段使用自定義鍵盤擴展,您可以使用SecureTextEntry中的 SecureTextEntry(SwiftUI 中的SecureField )。 盡管這些對象會自動屏蔽用戶輸入而無需更改它(這使得它們易於用於密碼,但不適用於所有類型的機密)。

例如,SwiftUI 聲明如下所示:

var passw: String = ""
(...)
SecureField("Password", text: $passw)

第一個參數是用戶將看到的提示。

請注意, SecureField不僅會在其字段上自動阻止鍵盤擴展,還會在同一應用程序屏幕上的其他字段上自動阻止鍵盤擴展(也適用於TextField )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM