ユーザー名テキストフィールドにフォーカスがあり、何かを入力したときに、パスワード NSTextField にフォーカスを与える際に問題が発生しています。パスワードのテキストフィールドをクリックしても何も起こらず、ユーザー名のテキストフィールドにフォーカスが残ります。ユーザー名テキストフィールドのテキストをクリアしてからパスワードフィールドをクリックすると、フォーカスが切り替わるようになりました。
簡単に言えば、ユーザー名のテキストフィールドにフォーカスがあり、テキストがある場合、パスワードのテキストフィールドにフォーカスを切り替えることはできません (クリックする、タブを押すなどの方法で)。テキストをクリアすると、問題なく切り替えることができます。
私のプロジェクトのセットアップ
これは私のビュー構造です
MainViewController (subclass of NSViewController)
|
|
Window (NSWindow)
|
|
------ LoginView (Subclass of NSView)
| |
| |
| ------ UsernameTextField (NSTextField)
| |
| |
| ------ PasswordTextField (NSTextField)
|
|
------ MainView (subclass of NSView)
|
|
And other views (NSView)
アプリに 3 つの画面があり、これらのビューを描画するために 3 つの NSView サブクラスを作成しました。LoginView は、それらのビューの最初のものです。LoginView には、問題の 2 つのテキストフィールドがあります。
インターフェイス ビルダーを使用して UI 全体を作成しているため、コードで表示するものはあまりありません。
これは、LoginView を MainViewController のウィンドウに追加する方法です
@implementation MainViewController
------
------
-(void)awakeFromNib {
[[self window] setContentSize:[self.loginView frame].size];
[[[self window] contentView] addSubview:self.loginView];
[[[self window] contentView] setWantsLayer:YES];
}
----
----
@end
NSTextFieldDelegate を実装しようとしましたが、
@implementation LoginView
-----
-----
- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor{
return YES;
}
- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor{
return YES;
}
-----
-----
@end
これらのメソッドは、フォーカスが切り替わるたびに呼び出されます。ただし、フォーカス スイッチがない場合、デリゲート メソッドは起動しません。
何か案が?