如何正确使用NSTextField的委派

Dav*_*mez 1 macos objective-c nstextfield

我试图为NSTextField对象实现一个委托,这样我就可以实时检测用户输入并给出一些关于该特定字段中没有允许输入的反馈.特别是,我想onChange()从JavaScript 模拟该方法,实时检测用户输入,并在写入不受支持的值时向他显示警告.

即应用程序有一个文本字段,它只接受0到255之间的数值(如RGB值),我想知道用户何时写入不是数值或超出范围值,以立即显示警告消息或更改文本现场背景颜色,只是一个视觉提示让他知道输入它是错误的.

在此输入图像描述 在此输入图像描述

就像你在上面的图片上看到的那样,每次用户在文本字段中输入禁止值时,我都想显示一个警告标志.

我一直在阅读了很多的苹果的文档,但我不明白,要实现哪些委托(NSTextFieldDelegate,NSTextDelegate,或NSTextViewDelegate),还有,我不知道如何实现它在我的AppDelegate.m文件,且该方法的使用,以及如何获得通知用户编辑.

现在,我已经在我的init方法中使用类似的东西设置了委托,[self.textField setDelegate:self];但我不明白如何使用它或者实现哪种方法.

Dav*_*mez 8

我找到了一个使用此问题中发布的信息的解决方案... 收听我的文本字段的值更改

首先,我必须在AppDelegate.h文件中声明NSTextFieldDelegate

@interface AppDelegate : NSObject <NSApplicationDelegate, NSTextFieldDelegate>
Run Code Online (Sandbox Code Playgroud)

之后,当用户在AppDelegate.m文件中更新它时,我必须实例化我想要修改的NSTextField对象的委托.

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [self.textField setDelegate:self];
}
Run Code Online (Sandbox Code Playgroud)

最后,我实现了使用我想要设置的更改来检测字段编辑的方法.

- (void)controlTextDidChange:(NSNotification *)notification {
    NSTextField *textField = [notification object];
    if ([textField doubleValue] < 0 | [textField doubleValue] > 255) {
        textField.textColor = [NSColor redColor];
    }
}

- (void)controlTextDidEndEditing:(NSNotification *)notification {
    NSTextField *textField = [notification object];
    if ([textField resignFirstResponder]) {
        textField.textColor = [NSColor blackColor];
    }
}
Run Code Online (Sandbox Code Playgroud)