我的目标是在一个字段中输入一个数字,同时更新其他字段.我尝试在文本字段属性中单击“连续”但它似乎没有做任何事情.
这是我的界面文件:
#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连续更新所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)