接口生成器与NSButton和NSTextField的沮丧行为

时间:2012-03-31 10:09:12

标签: objective-c macos interface-builder nstextfield nsbutton

让我们从头开始

创建了新的Xcode项目,打开的界面构建器在NSWindow上拖动了一个NSButton和一个NSTextField。

创建.....,好的这是我的以下代码

#import <Cocoa/Cocoa.h>

@interface SampleTextFieldButtonAppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *window;
    IBOutlet NSTextField *textField;
}

@property (assign) IBOutlet NSWindow *window;

- (IBAction)button:(NSButton *)myBtn;

@end


#import "SampleTextFieldButtonAppDelegate.h"

@implementation SampleTextFieldButtonAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application 
}

- (void)controlTextDidEndEditing:(NSNotification *)obj
{
    NSString *textFieldString = [textField stringValue];
    NSLog(@"controlTextDidEndEditing %@",textFieldString);
}

- (IBAction)button:(NSButton *)myBtn
{
    NSLog(@"button");
}

@end

去接口Builder, 连接textField出口到NSTextField控件,并将textField的delegate outlet连接到我的SampleTextFieldButtonAppDelegate对象 连接按钮动作到NSButton控件。

指定按钮键等效。返回/输入密钥

跑到XCode,最初文本域被聚焦,从键盘按下Tab键,焦点已更改为按钮,按下tab键再次焦点转到textField。这次我在我的文本字段中键入了一些文本并按了Return键。

请参阅以下日志消息,

2012-03-31 15:37:37.723 SampleTextFieldButton [1845:a0f] controlTextDidEndEditing 2012-03-31 15:37:41.601 SampleTextFieldButton [1845:a0f] controlTextDidEndEditing dasdj 2012-03-31 15:37:41.629 SampleTextFieldButton [1845:a0f]按钮

为什么在我与NSTextField交互时调用按钮操作?请给我一些解决方案。

1 个答案:

答案 0 :(得分:1)

指定按钮键等效。返回/输入密钥

跑到XCode,最初文本域被聚焦,从键盘按下Tab键,焦点已更改为按钮,按下tab键再次焦点转到textField。这次我在文本字段中键入了一些文本并且按下返回键

  

为什么在我与NSTextField交互时调用按钮操作?

因为您按下了键盘的回车键。这就是为什么keypress equiv通常与修饰符(cmd,alt,shift)结合使用

想象一下,如果不是打印快捷键“cmd + p”,快捷方式就是“p”。我的电脑已经开始打印5次,写下这两行:)

您可以进行直接的键绑定,例如,当您构建游戏时,“z”用于更进一步,“q”向左转,等等,但请确保在文本编写期间不使用。只需在textDidBeginEditing事件上禁用按钮上的键绑定,然后将绑定放回textDidEndEditing。