阻止用户在文本字段

时间:2017-09-19 13:39:09

标签: ios swift uitextfield

我正在创建一个电话号码格式化程序,并且不打破我的后台格式化逻辑,我希望用户只能键入数字并删除(数字键盘),而不是在他的触摸中移动UITextfield.text。这也会阻止用户粘贴文本,这也是我想要阻止的。所以,简而言之,我希望用户填写电话号码,如果他/她需要更正一个字符,他/她应该删除这些字符后的所有数字,以便能够删除错误的字符。

因此,文本应该是可编辑的但不可选择(并且光标不可移动)。

我的猜测是它可能是这种方法的内容。

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

2 个答案:

答案 0 :(得分:0)

防止用户输入textField

中文本之间的任何内容
extension ViewController : UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if range.location + range.length < (textField.text?.characters.count)! {
            return false
        }
        else {
            return true
        }
    }
}

上面的代码不会阻止用户输入文本字符,只是为了解释如何防止用户编辑用户输入的文本并允许用户仅在结束时修改字符串

修改

  

这也会阻止用户粘贴文本,这是一些东西   我也想阻止

为了防止用户粘贴textField上的任何内容,您需要继承textField并覆盖canPerformAction

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    if action == #selector(UIResponderStandardEditActions.paste(_:)) {
        return false
    }
    return super.canPerformAction(action, withSender: sender)
}

答案 1 :(得分:0)

您可以使用以下方法创建子类并禁用操作:

class MyTextField: UITextField{
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        return false
    }
}