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