2016-07-21 4 views
2

私は複利計算ツールを構築しました。アプリケーションがほぼ実行されている今、私は繰り返しを防止したいと思います。テキストフィールドに入力します。Swiftの小数点記号の繰り返しを停止する

私は三つのこと、以下の行っているが、それはより1桁区切り文字を入力してからユーザーを防止されていない

  1. にテキストフィールドのデリゲートプロパティを接続しUITextFieldDelegateするクラスに準拠ビューコントローラ
  2. は、元本、利息、FREQ、年のテキストフィールドに以下の機能を追加しました:

    func principal(principal: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
        let existingTextHasDecimalSeparator = principal.text?.rangeOfString(".") 
        let replacementTextHasDecimalSeparator = string.rangeOfString(".") 
    
        if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
         return false 
        } 
        else { 
         return true 
        } 
    } 
    
    func interest(interest: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
        let existingTextHasDecimalSeparator = interest.text?.rangeOfString(".") 
        let replacementTextHasDecimalSeparator = string.rangeOfString(".") 
    
        if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
         return false 
        } 
        else { 
         return true 
        } 
    } 
    
    func freq(freq: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
        let existingTextHasDecimalSeparator = freq.text?.rangeOfString(".") 
        let replacementTextHasDecimalSeparator = string.rangeOfString(".") 
    
        if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
         return false 
        } 
        else { 
         return true 
        } 
    } 
    
    func years(years: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
        let existingTextHasDecimalSeparator = years.text?.rangeOfString(".") 
        let replacementTextHasDecimalSeparator = string.rangeOfString(".") 
    
        if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil { 
         return false 
        } 
        else { 
         return true 
        } 
    } 
    

ご協力いただきましてありがとうございます。

答えて

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

は、プロトコルに準拠していません。

あなたは(名前は重要では)正確に完全な署名と一致する必要があります。

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

あなたが持っている場合には(いずれかを使用し、1が変更されている見るためにあなたのVCのテキストフィールドに対してtextFieldパラメータをチェックする必要があります異なる行動)。

上記の4つの機能が同じであるように見えるので、実装の特定のテキストフィールドではなく、常にパラメータを参照することができます。

+1

おかげで..私は、すべての特定のテキストフィールドの実装を取り出して、正確に完全な署名が一つだけの機能を使用するためにチェックします。 – KawaiKx

0

このコードは、仕事に行くされていない。

if existingTextHasDecimalSeparator != nil && replacementTextHasDecimalSeparator != nil{} 

Appleのドキュメントによれば、この方法は、aStringの最初の発生の受信機に位置し、長さを与えるNSRange構造を返します。 aStringが見つからないか空である場合は{NSNotFound、0}を返します(@ "")。

ので、代わりのあなたが実在しない範囲かどうかを確認する必要がnilを、それはすべてのテキストフィールドのために素晴らしい仕事を

if existingTextHasDecimalSeparator != NSNotFound && replacementTextHasDecimalSeparator != NSNotFound{} 
関連する問題