Swift:复制/粘贴启用和禁用特定字段

时间:2018-11-05 20:26:21

标签: ios swift xcode

我已经创建了用户名和密码。用户名没有字符数限制,但密码有8位数字字符数限制。如何禁用仅复制/粘贴密码字段。以及如何过滤一些对用户名无效的字符。

1 个答案:

答案 0 :(得分:0)

有关复制和粘贴问题:

您将需要创建自己的TextField类,该类继承UITextField,然后重写canPerformAction委托方法以禁用粘贴:

override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
    if action == "paste:" {
        return false
    }        
    return super.canPerformAction(action, withSender: sender)
}

更详细的描述:How to disable Pasting in a TextField in Swift?

有关字符问题:

与上面类似的概念,只不过您需要实现textFieldDidEndEditingshouldChangeCharactersIn委托方法。

textFieldDidEndEditing将允许您在用户停止编辑该字段之后评估该字段中的字符串。示例:

func textFieldDidEndEditing(_ textField: UITextField, reason: UITextFieldDidEndEditingReason) {
    switch textField {
        case usernameTextField:
            // evaluate the `textField.text` for is a valid username
        case passwordTextField:
            // evaluate the `textField.text ` for is a valid password
    }
}

shouldChangeCharactersIn将允许您评估每个击键的字符串(我更喜欢在评估文本字段输入时使用后者)。示例:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    switch textField {
        case usernameTextField:
            // evaluate the `replacementString` for is a valid username
        case passwordTextField:
            // evaluate the `replacementString` for is a valid password
    }
    return true
}