xcode 如何在SwiftUI TextField中部分屏蔽令牌键

gev0vcfq  于 2023-08-07  发布在  Swift
关注(0)|答案(1)|浏览(85)

我正在开发一个SwiftUI应用程序,其中有一个TextField用于输入令牌密钥。我想部分屏蔽令牌密钥,只显示前几个字符,并将其余的替换为屏蔽字符(e.g.但是,SwiftUI中的SecureField屏蔽了整个输入。
我尝试过通过子类化SecureField并覆盖它的textContentType来定制它,但这并没有提供所需的结果。我还试图修改苹果文档中提供的CustomSecureField代码,但它仍然屏蔽了整个输入。
代码如下:

import SwiftUI

struct SettingsView: View {
    @Binding var settingsShown: Bool
    @Binding var messages: [Message]

    @AppStorage("authToken") var authToken: String = ""

    // ... other code ...

    private var authTokenField: some View {
        HStack {
            SecureField("Enter your auth token here", text: $authToken)
                .foregroundColor(.blue)
                .textFieldStyle(.plain)
                .padding(4)
                .padding(.horizontal, 4)
                .background(Color(red: 0.2, green: 0.2, blue: 0.2).cornerRadius(6))
            
            // ... other code ...
        }
        .padding().frame(maxWidth: .infinity, alignment: .leading)
    }

    // ... other code ...
}

struct Message {
    // ... message properties ...
}

字符串
这就是我想要的:

的数据
这就是我得到的:

euoag5mw

euoag5mw1#

您可以定义一个代理变量来动态更改显示值:

struct ContentView: View {
    @State var actualToken: String = ""
    var displayToken: Binding<String> { 
        .init { actualToken.enumerated().map { String($0.offset < 4 ? $0.element : Character("*")) }.joined() }
         set: { actualToken = $0 }
    }

    var body: some View {
        TextField("Token", text: displayToken) // <- Uses the proxy instead of actual token
    }
}

字符串

相关问题