【问题标题】:How can I change the keyboard language for individual TextFields?如何更改单个 TextField 的键盘语言?
【发布时间】:2021-05-04 21:18:37
【问题描述】:

我的视图中有多个 TextField,我想根据用户点击的 TextField 更改键盘语言。我知道我可以更改 .numberPad 之类的类型,但语言如何?

【问题讨论】:

标签: swift swiftui


【解决方案1】:

如果用户已将语言添加到他的键盘,您可以制作自定义文本字段并执行以下操作:

创建自定义文本字段和文本字段视图

import Foundation
import UIKit
import SwiftUI

class SpecificLanguageTextField: UITextField {
    
    var language: String? {
        didSet {
            if self.isFirstResponder{
                self.resignFirstResponder();
                self.becomeFirstResponder();
            }
        }
    }
    
    override var textInputMode: UITextInputMode? {
        if let language = self.language {
            for inputMode in UITextInputMode.activeInputModes {
                if let inputModeLanguage = inputMode.primaryLanguage, inputModeLanguage == language {
                    return inputMode
                }
            }
        }
        return super.textInputMode
    }
    
}

struct SpecificLanguageTextFieldView: UIViewRepresentable {

    let placeHolder: String
    var language: String = "en-US"
    @Binding var text: String

    func makeUIView(context: Context) -> UITextField{
        let textField = SpecificLanguageTextField(frame: .zero)
        textField.placeholder = self.placeHolder
        textField.text = self.text
        textField.language = self.language
        return textField
    }

    func updateUIView(_ uiView: UITextField, context: Context) {
    }

}

然后像这样使用它:

import SwiftUI

struct SpecificLanguageView: View {
    @State var text: String = ""
    var body: some View {
        SpecificLanguageTextFieldView(placeHolder: "test", language: "en-GB", text: $text)
    }
}

struct SpecificLanguageView_Previews: PreviewProvider {
    static var previews: some View {
        SpecificLanguageView()
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2016-08-11
    • 2011-08-19
    • 1970-01-01
    • 2011-09-14
    • 2023-03-04
    • 2016-12-30
    相关资源
    最近更新 更多