bts*_*umy 9 macos cocoa nstextfield appkit nsnumberformatter
我使用NSNumberFormatter完全不知所措.这应该是完全简单但我不能让它工作.
我想设置一个NSTextField以允许输入十进制数字,或者带小数点或不带小数点.以下是我认为可行的方法:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumFractionDigits:0];
[formatter setMaximumFractionDigits:4];
[formatter setAllowsFloats:YES];
[[timeFlowMultiplierTF cell] setFormatter:formatter];
Run Code Online (Sandbox Code Playgroud)
但是,在文本字段中键入时,按小数点的"句点"键不会产生一个.键入"3.14"给我"314".抛出[formatter setAlwaysShowsDecimalSeparator:YES]将最初正确格式化数字,但如果我输入它,我再次无法输入小数点.
我在这里错过了什么?你会认为这很简单
Jam*_*nek 11
我意识到这已经太晚了4年,但我只是遇到了同样的废话,并且认为我会分享问题(或可能是)的后代.
事实证明,所有的NSTextField的值访问器(-objectValue,-stringValue,-doubleValue,等等)都最终调用-validateEditing.-validateEditing反过来,使用附件NSFormatter将编辑后的文本转换为对象值,然后使用重新格式化的值重置字段中的文本.
因此,如果您有任何代码在用户编辑它时监视该字段并且您"查看"该字段中的值,则无意中重新格式化并重置文本字段中的文本.
并不是文本字段不会让您键入句点; 这就是文本字段中已有"3",当您键入句点时,文本将更改为"3".如果你有一个action/notification/delegate方法,只要字段中的某些内容发生变化就会运行,并且你调用任何类型的 Value方法,那就是"3".格式化为"3"并更新单元格,删除刚刚键入的句点.
我的黑客是避免使用 - 类型 Value方法并查看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 );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1617 次 |
| 最近记录: |