我想设置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不允许输入十进制数字所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)