2016-02-21 8 views
7

मैं एक प्वाइंट ऑफ़ सेल्स ऐप विकसित कर रहा हूं।इनपुट मनी राशि के लिए UITextField

तो मैं

  1. मान लीजिए कि उपयोगकर्ता इनपुट 100000 लेकिन मैं यह स्वचालित रूप से 100,000 ऊपर दिखाना चाहते हैं करना चाहते हैं। और 10000001,000,000

  2. दूसरी समस्या यह है कि, मैं नहीं चाहता कि उपयोगकर्ता . स्वयं इनपुट कर सके।

  3. तीसरी समस्या यह है कि चूंकि यह पैसा है, इसलिए हम शुरुआत में उपयोगकर्ता को 0 दर्ज नहीं कर सकते हैं।

कोई विचार? , मैं किसी भी दशमलव स्थानों की जरूरत नहीं है हम भी में लेने की जरूरत:

अब तक मैं दशमलव अंक के लिए इनपुट को प्रतिबंधित करने के केवल

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

     let numberSet: NSCharacterSet = NSCharacterSet.decimalDigitCharacterSet().invertedSet; 
     return string.stringByTrimmingCharactersInSet(numberSet).length > 0 || string == ""; 
} 

आपको बहुत बहुत धन्यवाद

पुनश्च कामयाब रहे खाता उपयोगकर्ता जब बैकस्पेस

उत्तर

3

Xcode 8.2.1 • स्विफ्ट 3.0.2

import UIKit 

class ViewController: UIViewController { 
    @IBOutlet weak var inputField: UITextField! 
    var amount: Int { return inputField.string.digits.integer } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     inputField.textAlignment = .right 
     inputField.keyboardType = .numberPad 
     inputField.text = Formatter.decimal.string(from: amount as NSNumber) 
     inputField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged) 
    } 
    func editingChanged(_ textField: UITextField) { 
     textField.text = Formatter.decimal.string(from: amount as NSNumber) 
     print(amount) 
    } 
} 

extension NumberFormatter { 
    convenience init(numberStyle: NumberFormatter.Style) { 
     self.init() 
     self.numberStyle = numberStyle 
    } 
} 
struct Formatter { 
    static let decimal = NumberFormatter(numberStyle: .decimal) 
} 
extension UITextField { 
    var string: String { return text ?? "" } 
} 

extension String { 
    private static var digitsPattern = UnicodeScalar("0")..."9" 
    var digits: String { 
     return unicodeScalars.filter { String.digitsPattern ~= $0 }.string 
    } 
    var integer: Int { return Int(self) ?? 0 } 
} 

extension Sequence where Iterator.Element == UnicodeScalar { 
    var string: String { return String(String.UnicodeScalarView(self)) } 
} 
+0

उत्तर देने के लिए धन्यवाद, लेकिन मैं 'UITextFieldDelegate' समाधान पसंद करता हूं, क्योंकि संपादन परिवर्तन ईवेंट केवल टेक्स्टफील्ड के पाठ को पहले ही बदलने के बाद ट्रिगर करेगा। जिसका मतलब है कि उपयोगकर्ता देरी – JayVDiyk

+0

@JayVDiyk देख सकता है इसमें कोई देरी नहीं है। यह संपादन संपादन से जुड़ा हुआ क्षेत्र UIControlEvent बदल गया है। क्या आपने नमूना परियोजना की कोशिश की है? –

+2

धन्यवाद, यह काम करता है। मुझे बकाया – JayVDiyk

2

सरल बात से टकराने कर्सर स्थिति को बदलने जब मैं आया था के साथ पूरी तरह

स्विफ्ट 2.0 पर परीक्षण किया आप पाठ फ़ील्ड प्रतिनिधि के किसी भी उपयोग कर सकते हैं आप जो एक सूट

  let price = Int(textField.text!) 

     let _curFormatter : NSNumberFormatter = NSNumberFormatter() 

     _curFormatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 

     _curFormatter.currencyCode = "INR" 

     _curFormatter.maximumFractionDigits = 0 

     let total = _curFormatter.stringFromNumber(price!) 

     textField.text = total 

OUTPUT