我想要一个'$'登录无法擦除的文本字段。用户应该能够在后面输入值,如果他按下退格键,则只应该删除他输入的值。向UITextField添加前缀
之所以我不能使用UILabel是因为UITextfield中的文本是居中对齐的,并且随着用户输入值而增长到任何一边。
请提供任何解决方案
我想要一个'$'登录无法擦除的文本字段。用户应该能够在后面输入值,如果他按下退格键,则只应该删除他输入的值。向UITextField添加前缀
之所以我不能使用UILabel是因为UITextfield中的文本是居中对齐的,并且随着用户输入值而增长到任何一边。
请提供任何解决方案
NO
。此外,您可能需要实施-textFieldDidBeginEditing:
将光标放置在“$”之后,如果它尚未存在。
正如在以前的答案Add a prefix to UITextField
的textFieldDidBeginEditing
内的委托方法我用下面的代码发现是格式化字符串我们前/后固定货币符号最佳和正确的方式指出/码
NSNumberFormatter* formatter = [[NSNumberFormatter alloc]init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setPaddingPosition:NSNumberFormatterPadAfterPrefix];
[formatter setCurrencySymbol:symbol];
[formatter setMaximumFractionDigits:2];
[formatter setMinimumFractionDigits:2];
[formatter setUsesGroupingSeparator:YES];
[formatter setCurrencyGroupingSeparator:@","];
[formatter setCurrencyDecimalSeparator:@"."];
不需要使用shouldChangeCharactersInRange委托方法。最简单,最方便的解决方案是这样的
var label = UILabel(frame: CGRectMake(0, 0, 50, 50))
label.text = "$";
label.backgroundColor = UIColor(white: 0.0, alpha: 0.0)
tenantField.rightViewMode = .Always
tenantField.rightView = label
你也可以继承UITextField
为其取量值中的所有文本字段。
class SpecialTextField: UITextField {
var amount: String {
get {
if self._amount.characters.count > 1 {
return (self._amount as NSString).substringFromIndex(2)
}
return ""
}
}
// MARK: - UITextField Observing
override internal func willMoveToSuperview(newSuperview: UIView!) {
if newSuperview != nil {
keyboardType = .DecimalPad
addTarget(self, action: #selector(SpecialTextField.didChangeText), forControlEvents: .EditingChanged)
}
}
override internal func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
return false
}
private var newVal: String = ""
private var _amount: String = ""
func didChangeText() {
if (text?.characters.count > 2) {
if text?.rangeOfString("$ ") == nil {
text = newVal
}
}
if (text?.characters.count == 1) && (text?.characters.count > newVal.characters.count) {
text = "$ " + text!
}
if (text?.characters.count == 2) && (text?.characters.count < newVal.characters.count) {
text = ""
}
newVal = text ?? ""
_amount = newVal
}
}
这将插入每当进入第一号的$
标志,并删除它时,所有的号码都删除。
var amount
将在删除$
符号后给出用户输入的实际金额值。
希望这有助于。
你看过委托方法吗?特别是: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)范围replacementString:(NSString *)string' – CodaFi 2012-03-18 06:21:59