1

ユーザー名テキストフィールドにフォーカスがあり、何かを入力したときに、パスワード 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

これらのメソッドは、フォーカスが切り替わるたびに呼び出されます。ただし、フォーカス スイッチがない場合、デリゲート メソッドは起動しません。

何か案が?

4

0 に答える 0