2017-07-11 48 views
1

Swift中的新手,请在我输入时帮助我。或在.0或.00之后,它应该反映为0.00,但这对myTxtField.text不可见。手动格式化

以下是我的代码 -

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
     // return NO to not change text 
     //Decimal 
     switch string { 
     case "0","1","2","3","4","5","6","7","8","9",".": 
      currentString += string 
      print(currentString) 
      formatCurrency(currentString) 

     default: 
      if string.characters.count == 0 && currentString.characters.count != 0 { 
       currentString = String(currentString.characters.dropLast()) 
       formatCurrency(currentString) 
     } 
    } 

    return false 
} 

func formatCurrency(string: String) { 

     let formatter = NSNumberFormatter() 
     formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle 
     formatter.maximumFractionDigits = 2 
     formatter.roundingMode = .RoundDown 
     formatter.locale = NSLocale(localeIdentifier: "en_US") 
     let numberFromField = (NSString(string: currentString).doubleValue) 
     let tAmount:String! 
     if string == "" { 
     myTxtField.text = "" 
     tAmount = "$" + formatter.stringFromNumber(numberFromField)! 
     }else { 
     myTxtField.text = "$" + formatter.stringFromNumber(numberFromField)! 
     tAmount = "$" + formatter.stringFromNumber(numberFromField)! 
     } 
     print("value=\(HManager.convertCurrencyToDouble(tAmount))") 

} 
+0

你的问题还不清楚。你想看看小数位吗?但你正在四舍五入。 – Desdenova

+0

不!如果我输入1.00它的myTxtField中只有1,它忽略。和0,如果我输入1.08,那么它完全显示 – Vandana

回答

1

以下是使用shouldChangeCharactersIn委托方法和editingDidEnd来实现自己的目标的一个例子。

  • shouldChangeCharactersIn将文本字段限制为仅接受数字和小数点.
  • editingDidEnd是用2个十进制数字格式化文本字段。

enter image description here

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

    @IBOutlet weak var textField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     textField.delegate = self 
    } 

    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 

     let allowedCharacters = CharacterSet.decimalDigits 

     if string.rangeOfCharacter(from: allowedCharacters.inverted) != nil { 
      // If the added character is not a number 
      if string == "." { 
       // If the added character is the decimal point 
       let countDots = textField.text!.components(separatedBy: ".").count - 1 
       if countDots == 0 { 
        return true 
       } 
      } 
      return false 
     } 
     return true 
    } 

    @IBAction func editingDidEnd(_ sender: UITextField) { 
     // Format the input with 2 decimal digits. 
     if let input = sender.text, let inputDouble = Double(input) { 
      sender.text = String(format: "%.2f", inputDouble) 
     } else { 
      sender.text = "0.00" 
     } 
    } 
} 

UPDATE

为了添加一个货币符号($),并删除小数部分如果需要的话,你需要有一个函数来检查无论输入是double还是Int

@IBAction func editingDidEnd(_ sender: UITextField) { 
    // Format the input with 2 decimal digits. 
    if let input = sender.text, let number = Double(input) { 
     if canConvertToInt(number) { 
      sender.text = "$\(Int(number))" 
     } else { 
      sender.text = "$\(number)" 
     } 
    } else { 
     sender.text = "$0" 
    } 
} 

// Check if the number is not decimal 
func canConvertToInt(_ double: Double) -> Bool { 
    return rint(double) == double 
} 
+0

Thanx!我正在使用货币formatting.does它会工作? – Vandana

+0

通过“货币格式”,你的意思是这样** $ 0.15 **? – Lawliet

+0

是的!试试这个1.00它的显示1 0.00显示0我希望如果我输入0.0或0.00它显示相同的文本域 – Vandana