给UITextField添加一个前缀

我想要一个'$'login在无法删除的文本字段。 用户应该能够在input值之后input值,如果他按下退格键,则只能删除input的值。

我之所以不能使用UILabel是因为UITextfield中的文本是居中alignment的,并且随着用户input值而增长到任何一边。

请提供任何解决scheme

  1. 最初将文本字段的文本设置为“$”。
  2. 将文本字段的委托设置为您的某个对象(可能是包含它的视图控制器)。
  3. 实现-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的实际金额值,取消$符号后。

希望这有助于。