gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:04:39 27 4
gpt4 key购买 nike

我对 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.”。如果您有一个每当字段中的某些内容发生更改时就会运行的操作/通知/委托(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 不允许输入十进制数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6337464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com