2017-01-11 6 views
1

NSTextFieldは、Macアプリケーションで12.43.6のような数字とピリオドを受け入れるようにしています。小数点(#。#)の数字と期間のみを受け入れるようにNSTextFieldを強制する

他のSOの質問を確認した後、私はかなり近づいているように感じますが、私はそれを得られません。以下のコードは、.文字を許可しないという点を除いて動作します。 trueを返し、.と入力しても私に鳴らさないが、その文字をフィールドに表示させない。

class decimalFormatter: NumberFormatter { 

    override func isPartialStringValid(_ partialString: String, newEditingString newString: AutoreleasingUnsafeMutablePointer<NSString?>?, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool { 

    //Allows the text to be deleted 
    if partialString.isEmpty { 
     return true 
    } 

    //Check for #.# numbers 
    let charSet = NSCharacterSet(charactersIn: "1234567890.").inverted 

    if partialString.rangeOfCharacter(from: charSet) != nil{ 
     NSBeep() 
     return false 
    }else{ 
     return true 
    } 

    } 
} 

私は間違っていると思いますか?

+0

http://stackoverflow.com/a/39458375/2303865 –

答えて

1

もっと簡単な方法が見つかりました。中にcontrolTextDidChange私はちょうどこれをした:

let charSet = NSCharacterSet(charactersIn: "1234567890.").inverted 
let chars = fieldDuration.stringValue.components(separatedBy: charSet) 
fieldDuration.stringValue = chars.joined() 

それは素晴らしい作品!

+1

'chars.joined()' –

+0

@Clifton Labrum - これは甘美な答えです、優れた作品です。この問題はとてもばかげている! – Woodstock

関連する問題