将部分UITextField设置为不可编辑

时间:2018-08-11 15:45:15

标签: ios swift uitextfield

我有用于货币选择的UITextField,我想将其文本的一部分设置为不可编辑(在文本$ 9,99中,用户只能替换9,99)。任何想法如何做到这一点?

5 个答案:

答案 0 :(得分:0)

不可能部分编辑,我认为您应该在货币符号和金额之间分开。假设您为货币符号创建了新的UIlabelUItextfield,然后也将货币金额也设置为新的textfield。 如果使用两个textfields,则可以设置不能用yourTextField.enabled = falseyourTextField.isUserInteractionEnabled = false

编辑的货币符号

答案 1 :(得分:0)

无法完成,因此您只能使用货币符号的UIlabel,并且该符号会随着本地化而自动更改

答案 2 :(得分:0)

您可能会对此有所不同。使用单独的UILabel或将带有UILable的LeftView添加为$符号的TexFields leftView。而且,如果您不想这样做,可以使用委托方法中的方法。 Whic如下所示:

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let text = (textField.text! as NSString).replacingCharacters(in: range, with: string)
    return text.count > 0
}

我们在这里所做的是在编辑时检查文本字段中的文本,并获取文本字符数。如果字符> 0,则可以编辑textField,但如果在文本字段中仅保留$号,则我们将予以保护。

您可能想要检查要执行的文本字段,因为您可能有更多的文本字段,并且所有人都会使用它,因此仅检查该文本字段

答案 3 :(得分:0)

您需要在用户开始编辑时设置文本字段委托,并且字符计数== 0,然后在$符号后附加文本字段

答案 4 :(得分:0)

您可以向文本字段添加状态为“ editingChanged”的目标,例如:

textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

,如果textField的长度小于2(“ $”),只需将此字符串设置为textField.text值

@objc func textFieldDidChange(_ textField: UITextField) {
        guard let count = textField.text?.count else {
            return
        }
        if count < "$ ".count
        {
            textField.text = "$ "
        } 
    }