cocoa – NSNumberFormatter不允许输入十进制数字

cocoa – NSNumberFormatter不允许输入十进制数字,第1张

概述使用NSNumberFormatter我感到非常困惑.这应该是完全简单但我不能让它工作. 我想设置NSTextField以允许输入十进制数字,或者带小数点或不带小数点.以下是我认为可行的方法: NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];[formatter setNumberStyle:NSNumberForm 使用NSNumberFormatter我感到非常困惑.这应该是完全简单但我不能让它工作.

我想设置NSTextFIEld以允许输入十进制数字,或者带小数点或不带小数点.以下是我认为可行的方法:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];[formatter setNumberStyle:NSNumberFormatterDecimalStyle];[formatter setMinimumFractionDigits:0];[formatter setMaximumFractionDigits:4];[formatter setAllowsfloats:YES];[[timeFlowMultiplIErTF cell] setFormatter:formatter];

但是,在文本字段中键入时,按小数点的“句点”键不会产生一个.键入“3.14”给我“314”.抛出[formatter setAlwaysShowsDecimalSeparator:YES]将最初正确格式化数字,但如果我输入它,我再次无法输入小数点.

我在这里想念的是什么?你会认为这很简单

解决方法 我意识到这已经太晚了4年,但我只是遇到了同样的废话,并且认为我会分享问题(或者可能是)的后代.

事实证明,NSTextFIEld(-objectValue,-stringValue,-doubleValue等)的所有值访问器都会调用-valIDateEditing.反过来,-valIDateEditing使用附加的NSFormatter将编辑后的文本转换为对象值,然后使用重新格式化的值重置字段中的文本.

因此,如果您有任何代码在用户编辑它时监视该字段并且您“查看”该字段中的值,则无意中重新格式化并重置文本字段中的文本.

这不是文本字段不会让您键入句点;这就是文本字段中已有“3”,当您键入句点时,文本将更改为“3”.如果您有一个action / notification / delegate方法,只要字段中的某些内容发生更改,并且您调用任何-typeValue方法,就会运行“3”.格式化为“3”并更新单元格,删除刚刚键入的句点.

我的黑客是避免使用-typeValue方法并查看NSText对象以直接获取编辑后的文本,而不触发-valIDateEditing:

// some method that runs every time the fIEld changes...NSTextFIEld* valueFIEld = self.valueFIEld;NSNumberFormatter* fIEldFormatter = valueFIEld.formatter;NSText* fIEldEditor = valueFIEld.currentEditor;ID newValue = ( fIEldEditor!=nil ? [fIEldFormatter numberFromString:fIEldEditor.string] : valueFIEld.objectValue );
总结

以上是内存溢出为你收集整理的cocoa – NSNumberFormatter不允许输入十进制数字全部内容,希望文章能够帮你解决cocoa – NSNumberFormatter不允许输入十进制数字所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1024206.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存