objective-c – NSTextField连续更新

objective-c – NSTextField连续更新,第1张

概述我无法弄清楚如何让NSTextfield自动更新,而无需按“返回”或单击其他文本字段. 我的目标是在一个字段中输入一个数字,同时更新其他字段.我尝试在文本字段属性中单击“连续”但它似乎没有做任何事情. 这是我的界面文件: #import <Foundation/Foundation.h>@interface InchController : NSObject { IBOutlet NS 我无法弄清楚如何让NSTextfIEld自动更新,而无需按“返回”或单击其他文本字段.

我的目标是在一个字段中输入一个数字,同时更新其他字段.我尝试在文本字段属性中单击“连续”但它似乎没有做任何事情.

这是我的界面文件:

#import <Foundation/Foundation.h>@interface InchController : NSObject {    IBOutlet NSTextFIEld *centimetersTextFIEld;    IBOutlet NSTextFIEld *inchesTextFIEld;    IBOutlet NSTextFIEld *feetTextFIEld;}-(IBAction)convert:(ID)sender;@end

这是我的实现文件:

#import "InchController.h"@implementation InchController- (IBAction)convert:(ID)sender {    if (sender == inchesTextFIEld) {        float inches = [inchesTextFIEld floatValue];        [feetTextFIEld setfloatValue:(inches * 0.0833)];        [centimetersTextFIEld setfloatValue:(inches * 2.54)];    }    else if (sender == feetTextFIEld) {        float feet = [feetTextFIEld floatValue];        [inchesTextFIEld setfloatValue:(feet * 12)];        [centimetersTextFIEld setfloatValue:(feet * 30.48)];    }    else if (sender == centimetersTextFIEld) {        float centimeters = [centimetersTextFIEld floatValue];        [inchesTextFIEld setfloatValue:(centimeters * 0.394)];        [feetTextFIEld setfloatValue:(centimeters * 0.033)];    }}@end

所以这是根据Josh的解决方案更新的实现文件.注释掉IBAction,因为实现和接口文件不再需要它.

#import "LengthController.h"@implementation LengthController//- (IBAction) convert: (ID)sender {//}-(voID) controlTextDIDChange:(NSNotification *) note {    NSTextFIEld *changedFIEld = [note object];    if (changedFIEld == inchesTextFIEld) {        float inches = [inchesTextFIEld floatValue];        [feetTextFIEld setfloatValue: (inches * 0.0833)];        [centimetersTextFIEld setfloatValue: (inches * 2.54)];    }    if (changedFIEld == centimetersTextFIEld) {        float centimeters = [centimetersTextFIEld floatValue];        [inchesTextFIEld setfloatValue:(centimeters * 0.394)];        [feetTextFIEld setfloatValue:(centimeters * 0.033)];    }    if (changedFIEld == feetTextFIEld) {        float feet = [feetTextFIEld floatValue];        [inchesTextFIEld setfloatValue:(feet * 12)];        [centimetersTextFIEld setfloatValue:(feet * 30.48)];    }}@end
解决方法 使控制器成为文本字段的 delegate;您可以在Interface Builder中通过Ctrl键从文本字段拖动到控制器来设置它.

在你的控制器中,实现“NSControl Delegate”方法controlTextDidChange:,只要字段的文本发生变化,就会调用它(顾名思义).在该方法中,您可以验证文本,并在适当的情况下更新其他字段的内容.

传入的参数可以为您提供更改的文本字段;然后,您可以将其传递给现有的convert:方法以重用代码:

- (voID) controlTextDIDChange: (NSNotification *)note {    NSTextFIEld * changedFIEld = [note object];    [self convert:changedFIEld];}

动作方法没什么特别之处. IBAction返回类型评估为voID;它仅被Xcode用于公开在Interface Builder中使用的方法.因此,您可以像任何其他方法一样调用它们.在这里,您将获得相应的字段并将其作为sender参数传递,就好像该字段已调用了action方法本身一样.

总结

以上是内存溢出为你收集整理的objective-c – NSTextField连续更新全部内容,希望文章能够帮你解决objective-c – NSTextField连续更新所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1002136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存