gpt4 book ai didi

objective-c - NSTextField 持续更新

转载 作者:太空狗 更新时间:2023-10-30 04:01:20 28 4
gpt4 key购买 nike

我不知道如何让 NSTextfield 自动更新,而不必按“返回”或单击另一个文本字段。

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

这是我的接口(interface)文件:

#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,因为在实现和接口(interface)文件中不再需要它。

#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

最佳答案

让你的 Controller 成为delegate文本字段;您可以在 Interface Builder 中通过按住 Ctrl 从文本字段拖动到 Controller 来进行设置。

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

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

- (void) controlTextDidChange: (NSNotification *)note {

NSTextField * changedField = [note object];
[self convert:changedField];
}

Action 方法没有什么特别之处。 IBAction 返回类型的计算结果为 void; Xcode 仅使用它来公开在 Interface Builder 中使用的方法。因此,您可以像调用任何其他方法一样调用它们。在这里,您获得了适当的字段并将其作为 sender 参数传入,就好像该字段本身调用了操作方法一样。

关于objective-c - NSTextField 持续更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8410802/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com