将 UITextField 的一部分设置为不可编辑



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

你可能想在这个问题上有不同的想法。要么使用单独的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。

部分可编辑是不可能的,我认为您应该将货币符号与金额分开。假设您为货币符号制作了新的UIlabelUItextfield,然后将货币金额也作为新textfield。 如果你使用两个textfields,那么你可以设置货币符号,这是不能用yourTextField.enabled = falseyourTextField.isUserInteractionEnabled = false

编辑的

它不能这样做,所以你会只有货币符号的 UIlabel,符号会随着本地化而自动更改

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

您可以将目标添加到文本字段以用于状态"编辑已更改",例如:

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

如果文本字段的长度变得小于 2 ("$"(,只需将此刺痛设置为 textField.text 值

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

最新更新