2017-01-11 3 views
1

Я пытаюсь сделать так, чтобы NSTextField принимал только числа и периоды, такие как 12.4 и 3.6 в приложении Mac.Принудительно NSTextField принимать только десятичные числа (#. #) Числа и периоды

Я чувствую, что становлюсь довольно близко после рассмотрения других вопросов, но я не могу это получить. Приведенный ниже код работает, за исключением того, что он не разрешает . символов. Он возвращает 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

Смежные вопросы