给UITextField添加一个前缀
我想要一个'$'login在无法删除的文本字段。 用户应该能够在input值之后input值,如果他按下退格键,则只能删除input的值。
我之所以不能使用UILabel是因为UITextfield中的文本是居中alignment的,并且随着用户input值而增长到任何一边。
请提供任何解决scheme
- 最初将文本字段的文本设置为“$”。
- 将文本字段的委托设置为您的某个对象(可能是包含它的视图控制器)。
- 实现
-textField:shouldChangeCharactersInRange:replacementString:
如果提议的更改将删除“$”,则返回NO
。
此外,您可能需要实现-textFieldDidBeginEditing:
将光标放在“$”之后,如果它不在那里。
不需要使用shouldChangeCharactersInRange委托方法。 最简单和最方便的解决scheme是这样的
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添加一个前缀
里面的textFieldDidBeginEditing
作为委托方法,我发现使用下面的代码是最好的和正确的方式来格式化string我们是前/后固定货币符号/代码
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:@"."];
您可以将UITextField
的子类作为所有以value为值的文本字段。
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 } }
只要input第一个数字,就会插入一个$
符号,每当所有数字都被移除时,就会将其删除。
var amount
会给出用户input的实际金额值,取消$
符号后。
希望这有助于。