неуверенное поведение построителя интерфейса с NSButton и NSTextField - PullRequest
1 голос
/ 31 марта 2012

Пойдем с самого начала

Создан новый проект Xcode, создатель открытого интерфейса перетянул один NSButton и один NSTextField поверх NSWindow.

Создано ....., ОК, это мой следующий код

#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 к моему объекту SampleTextFieldButtonAppDelegate действие кнопки подключено к элементу управления NSButton.

Назначенная кнопка клавиши Эквив. вернуть / ввести ключ

Запустил XCode, изначально текстовое поле сфокусировано, нажата клавиша табуляции на клавиатуре, фокус изменен на кнопку, снова нажата клавиша табуляции, фокус перешел к textField. На этот раз я набрал текст в поле и нажал клавишу возврата.

См. Следующее сообщение в журнале, которое я получил,

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 Кнопка SampleTextFieldB [1845: a0f]

Почему вызывается действие кнопки, когда я взаимодействую со своим NSTextField? Пожалуйста, дайте мне какое-то решение для этого.

1 Ответ

1 голос
/ 31 марта 2012

Назначенная кнопка клавиши Эквив. вернуть / ввести ключ

Запустил XCode, изначально текстовое поле сфокусировано, нажата клавиша Tab на клавиатуре, фокус изменен на кнопку, снова нажата клавиша Tab, фокус перешел к textField. На этот раз я набрал текст в текстовом поле и нажал Return. Key .

Почему вызывается действие кнопки, когда я взаимодействую с моим NSTextField?

Потому что вы нажимаете клавишу ввода на клавиатуре. Вот почему эквивалент клавиш часто сочетается с модификаторами (cmd, alt, shift)

представьте, если вместо печати ярлыка "cmd + p" ярлык был просто "p". Мой компьютер начал бы печатать 5 раз, написав эти две строки :)

Вы можете делать прямые привязки клавиш, например, когда вы создаете игру, например, где «z» используется для продвижения вперед, а «q» - влево и т. Д., Но убедитесь, что это не используется, например, при написании текста. Просто отключите привязку клавиш для вашей кнопки в событии textDidBeginEditing и верните привязку в textDidEndEditing.

...