Objective c 在NSTextField中处理测量单位

Objective c 在NSTextField中处理测量单位,objective-c,cocoa,Objective C,Cocoa,我正在创建一个测试应用程序来计算矩形的面积。此应用程序使用NSTextField控件来获取矩形的长度和宽度。 用户需要输入一个字符串值,该值也包括长度单位(样本值2.5英寸,1500毫米)。 我希望NSTextField自动转换以厘米为单位的值(cm),以便在文本字段失去焦点时立即显示转换后的值(以厘米为单位) 例如: 用户输入长度为:1500 mm 只要用户转到下一个文本字段输入宽度,就会显示长度字段 显示值:150厘米 我们如何才能做到这一点?我想您应该使用委托方法ControlTextDi

我正在创建一个测试应用程序来计算矩形的面积。此应用程序使用NSTextField控件来获取矩形的长度和宽度。
用户需要输入一个字符串值,该值也包括长度单位(样本值2.5英寸1500毫米)。 我希望NSTextField自动转换以厘米为单位的值(cm),以便在文本字段失去焦点时立即显示转换后的值(以厘米为单位)

例如:

用户输入长度为:1500 mm

只要用户转到下一个文本字段输入宽度,就会显示长度字段

显示值:150厘米


我们如何才能做到这一点?

我想您应该使用委托方法ControlTextDiEndEditing:,当编辑完成时,它会发送到文本字段的委托。一旦从字段编辑器中获得字符串,就需要以某种方式对其进行解析以找到单元(解析方式取决于需要查找的内容)。如果你有一小部分你正在寻找的东西,比如cm,mm,m,那么你可能只需要使用rangeOfString:并测试0长度来找出输入的单位。顺便说一下,你应该正确地做你的数学- 1500毫米=150厘米

< p>我会考虑一种不同的方法,使用UIPIKER来显示可用的单位,并让他们分别输入数字。
否则,您将不得不执行所有这些解析。不明白解析的意义。另外,如果他们在拼写单位时出错,或者使用了不同的表示方式,那么你也必须对此做出解释。取决于您的应用程序,但如果用户必须键入单位,则使用UIPicker可能更方便。

由于此应用程序是我的一个项目的POC,因此我必须坚持使用NSTextField。好的,那么,您只需要使用NSString中的方法来解析文本。您将想看看NSString引用中的方法,特别是在“查找字符和子字符串”标题下。从字符串中提取数字非常容易。可以使用-doubleValue(如果不允许小数,则使用-integerValue)提取数字部分。然后可以通过删除数字/空格或在数字后搜索空格来搜索单位字符串。然后,您只需要根据一些列表确定单位字符串中表示的单位。以此类推,我可以通过对NSTextField进行子分类并重写-(BOOL)textShoulDediting来实现这一点,但问题是该子类的每个对象都将显示相同的行为。因此,目前我希望通过对NSFormatter进行子分类来实现它。