objective-c - 带有数字格式化程序的 NSTextField 不允许小数输入

标签 objective-c cocoa interface-builder nstextfield

我正在尝试制作一个简单的 Cocoa 应用程序,其中将数字输入到文本字段中。当在一个文本字段中输入数字时,另一个文本字段将自动更新为另一个数字(反之亦然)。我拖到窗口中的文本字段是界面生成器中的“带有数字格式化程序的文本字段”。我将文本字段设置为委托(delegate),允许它们自动更新。但是,格式化似乎不起作用。我无法输入小数。请帮忙!!!

头文件在这里:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    IBOutlet NSTextField *number1;
    IBOutlet NSTextField *number2;
}

@property (assign) IBOutlet NSWindow *window;

@end

这里的实现文件:

#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window = _window;

-(void)controlTextDidChange:(NSNotification *) note {
    NSTextField *changedField = [note object];

    if (changedField == number1) {
        float num1 = [number1 floatValue];
        [number2 setFloatValue: (num1*2.0)];
    }

    if (changedField == number2) {
        float num2 = [number2 floatValue];
        [number1 setFloatValue: (num2/2.0)];
    }
}

@end

最佳答案

这有点晦涩,但是您尝试做的事情实际上无法正常工作,但还有另一种选择。

在您的代码中:

float num1 = [number1 floatValue];
[number2 setFloatValue: (num1*2.0)];

第一行请求 number1当前值。由于您在 number1 上附加了一个数字格式化程序,因此会调用它来格式化文本...如果您输入了 123。 此时格式化的结果是123...并且你的小数点消失了。您会注意到您也不能输入逗号(千位分隔符)。

因此,根本问题是,在输入每个字符后,您的代码会强制其成为此时的有效数字。

另一种方法是仅在用户输入完整数字时才执行操作。您可以自己编写代码来在键入每个字符时分析输入,也可以使用快速而简单的方法等待用户点击并响应操作。

要执行后者,请将代码更改为:

- (IBAction) textDidChange:(id)sender
{
   if (sender == number1)
   {
      float num1 = [number1 floatValue];
      [number2 setFloatValue: (num1*2.0)];
   }
   else if (sender == number2)
   {
      float num2 = [number2 floatValue];
      [number1 setFloatValue: (num2/2.0)];
   }
}

并将其作为“选择器”连接到控件,并删除已有的“委托(delegate)”连接。

此解决方案不如您尝试的“动态”,但它确实有效。要获得动态响应,您需要编写更多涉及的代码,如上所述。

关于objective-c - 带有数字格式化程序的 NSTextField 不允许小数输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024318/

相关文章:

objective-c - 静态分析器错误地发现表达式为 "always 0"

macos - Mac OSX XCODE 中与 MDI Windows 等效的任何内容

objective-c - stringByEvaluatingJavaScriptFromString 识别webview内容高度

objective-c - 创建 OS X 搜索过滤器面板

XCode 接口(interface)构建器缺少 View 层次结构

iphone - 从 nib 文件加载 UIView?

objective-c - 我可以使用 Objective-C 将 block 作为 @selector 传递吗?

objective-c - 内存泄漏 JSONKit iOS

objective-c - 如何在 objective-c 中出现键盘时 ScrollView ?

iphone - 更改 NSIndexPath 对象的值