我可以强制用户在登录或注册屏幕中输入的内容只能是英文吗

can i force the user input in login or signup screen to be only in english

我打算强制用户输入只能是英文,这样如果用户注册,就可以阻止用户使用其他语言注册 我不知道 firebase 是否已经阻止了用户在看到的背后,但如果他们没有这样做,代码中是否有任何编程方式,或者这在开发应用程序时并不是一个真正的问题,我只是吓坏了

func textField(_ textFieldToChange: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textFieldToChange == username {
        let characterSetNotAllowed = CharacterSet.whitespaces
        if let _ = string.rangeOfCharacter(from:NSCharacterSet.uppercaseLetters) {
            return false
        }
        if let _ = string.rangeOfCharacter(from: characterSetNotAllowed, options: .caseInsensitive) {
            return false
        } else {
            return true
        }
    }
    return true
}

您可以开始对 UITextField 进行子类化并添加编辑更改的目标 UIControlEvents 并在更改时过滤用户输入的字符串:

class EnglishLettersField: UITextField {
    override func willMove(toSuperview newSuperview: UIView?) {
        addTarget(self, action: #selector(editingChanged), for: .editingChanged)
        editingChanged(self)
    }
    @objc func editingChanged(_ textField: UITextField) {
        guard let text = textField.text?.englishLetters else { return }
        textField.text = text
    }
}
extension CharacterSet {
    // create your own set with the allowed characters to filter your string
    static let englishLetters = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ")
}

extension String {
    // create a computed property to separate the original text using the custom character set inverted, join it again and return it
    var englishLetters: String {
        return components(separatedBy: CharacterSet.englishLetters.inverted).joined()
    }
}

您可以通过编程方式或使用界面生成器将其添加到您的视图中

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let englishLettersField = EnglishLettersField(frame: CGRect(origin: CGPoint(x: 50, y: 50), size: CGSize(width: 200, height: 50)))
        view.addSubview(englishLettersField)
    }
}

sample project