NSNumberFormatter 不允许输入十进制数字

2024-02-28

我对 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] 最初将正确格式化数字,但如果我输入它,我将再次无法输入小数点。

我在这里缺少什么?你会认为这真的很简单


我意识到这已经晚了四年了,但我刚刚遇到了同样的废话,我想我应该为后代分享问题是什么(或可能是什么)。

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

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

这并不是说文本字段不允许您输入句点;而是说文本字段不允许您输入句点。这是文本字段中已经有“3”,当您键入句点时,文本将更改为“3.”。如果您有一个操作/通知/委托方法,每当字段中的某些内容发生变化时就会运行,并且您调用任何 -type取值方法,即“3”。格式化为“3”,它会更新单元格,删除您刚刚输入的句点。

我的技巧是避免 -type价值方法并深入了解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 );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSNumberFormatter 不允许输入十进制数字 的相关文章

随机推荐

  • 大型 Maven 项目的存储库布局

    我有一个大型应用程序 约 50 个模块 使用类似于以下的结构 Application Communication modules 彩色通讯模块 SSN通讯模块 通讯模块等 路由器模块 Service modules Voting servi
  • 如何从颤振中的流式响应中获取响应? [复制]

    这个问题在这里已经有答案了 我正在使用 flutter 开发一个应用程序 并使用 http 库来调用我构建的 api 我想发出一个多部分请求来发送文件 它也发送它 但我无法从服务器收到任何响应 因为返回的对象是 StreamResponse
  • 如何查找违反引用完整性的记录

    我有两个表应该处于一对多关系 但表的多侧似乎有一些记录阻止创建关系 违反引用完整性 由于两个表中都有很多记录 是否有一种方法可以查询哪些记录位于多侧 而不是一侧 Ex Table 1 one side pk AccountId Table
  • Clojure STM ( dosync ) x Java 同步块

    Clojure STM dosync 方法和Java同步块有什么区别 我正在阅读 睡觉的理发师 问题中的以下代码 http www bestinclass dk index clj 2009 09 scala vs clojure roun
  • 如何在 Django 中使用新数据库重新开始?

    我删除了我的数据库 我想用一个新的数据库重新开始 我怎样才能做到这一点 我尝试创建一个新的数据源 但在应用迁移 或迁移时出现错误 无法找到表 这是真的 因为它是一个空数据库 当有人提取我的代码版本时 也会出现类似的情况 他不会有迁移或数据库
  • RMagick + Rails + Heroku?

    我想弄清楚如何在我的应用程序上使用 rmagick 然后使其在 Heroku 上运行 对于 Rails3 您必须添加此规范 gem rmagick 2 12 0 require gt RMagick 注意 要求区分大小写
  • 序言中的谓词

    我需要在 prolog 中定义一个谓词 它将一个列表作为输入 对 gt 5 的数字的平方求和 并减去 这就是我目前所拥有的 pred 0 pred Head Tail Result gr85 Head pred Tail Total Res
  • 使用 scan!() 读取 u8 时出现“宏未定义”

    我读到有关读取整数输入的内容如何在 Rust 1 0 中读取用户输入的整数 https stackoverflow com questions 30355185 how to read an integer input from the u
  • 使用 Nuxt.js 进行开发和生产的不同 baseURL

    如何为开发和生产添加不同的baseURL 这是目前我的 nuxt config js module exports mode universal axios See https github com nuxt community axios
  • 为什么 Karma 配置文件排除选项不起作用?

    我的示例 Angular 应用程序中有两个规范文件 规格文件名称是src app app component spec ts src app app component two spec ts 我只想运行文件中的测试src app app
  • Sidekiq - 重新安排失败的作业

    我有一个后台工作 使用 Sidekiq 连接到我的另一个服务 如下所示 def perform id user ABCClient instance user id end 有时这个 ABCClient 会宕机 在这种情况下我想重新安排 执
  • 如何使用 Django-oauth-toolkit 进行身份验证,通过 Django-rest-framework 测试 API 端点

    我有一个 Django rest framework 视图集 路由器来定义 API 端点 视图集定义如下 class DocumentViewSet viewsets ModelViewSet permission classes perm
  • 如何检查 MongoDB 中的数组字段是否包含唯一值或另一个数组?

    我现在用的是mongodb 我有一个博客文章集 它有一个tags字段是一个数组 例如 blogpost1 tags tag1 tag2 tag3 tag4 tag5 blogpost2 tags tag2 tag3 blogpost3 ta
  • Android / 9-patch PNG:如果我需要像 11-patch PNG 这样的东西怎么办?

    在 Draw 9 patch 中 一切看起来都很好 However 我的 SDK 说 9 patch png 格式错误 因为我有类似 11 patch png 的东西 因为我不希望小抓取区域被缩放 如何让它发挥作用 截图描述了一切 控制台中
  • NodeJs:缓慢的 req.pipe

    我发现 tus 的服务器实现 https tus io https tus io 对于nodejs https github com tus tus node server https github com tus tus node ser
  • gevent 和 posgres:异步连接失败

    我正在使用 gevent 处理基于 Django 的 Web 系统上的 API I O 我已经使用以下方法进行了猴子补丁 import gevent monkey gevent monkey patch socket 我已经使用以下方法修补
  • Web、应用程序和移动编程之间的主要技术区别是什么?

    我想知道Web ASP PHP Ruby等 之间的主要技术区别是什么 应用程序 C C NET Java 和移动 J2ME Objective C 编程 这是最难的 如果有人学会了其中之一 他可以轻松地切换到其他之一吗 首先 从一个技术的从
  • Android 共享图片不起作用

    我正在尝试使用以下代码共享应用程序的屏幕截图 View content findViewById R id layoutHome content setDrawingCacheEnabled true Bitmap bitmap conte
  • Plotly Dash 中心 dcc.输入文本字段

    我在弄清楚居中需要哪些样式参数时遇到了很多困难dash core components Input我的页面中间的文本字段 import dash import dash core components as dcc import dash
  • NSNumberFormatter 不允许输入十进制数字

    我对 NSNumberFormatter 的使用感到非常困惑 这应该非常简单 但我无法让它工作 我想设置一个 NSTextField 以允许输入带小数点或不带小数点的十进制数字 这是我认为可行的 NSNumberFormatter form