0

我有一个 NSWindow,它包含一个仅在某些特定场合出现的 NSView,这个 NSView 包含一个我想要的 NSSearchField,如果剪贴板上有数据,它将出现在 searchField 中,否则它将为空。我能够做到我想要的是SearchField 中有数据,它应该是焦点我这样尝试过:

在 NSViewController 类中有一个返回 NSSearchField 的函数,它是一个类变量

              -(NSSearchField*)getSearchField
                  {
                  return searchField;
                  } 

在 NSWindowController 类中,我将其作为第一响应者,其中 pSearchContact 是 NSViewController 类的实例变量

      [[self window] makefirstResponder:[pSearchContact getSearchField]];

它运行顺利,但我不知道为什么 searchField 没有得到焦点

只有当它是 NSWindow 的一部分时,他们的类似 searchField 才会成为第一响应者,因为在我的情况下,searchField 位于 NSView 中,而 NSView 位于 NSWindow 中。

提前致谢

4

2 回答 2

0

您的问题有点令人困惑,但我认为您的要求归结为“为什么我不能让我的搜索字段成为焦点?”。

那一行代码:

[[self window] makefirstResponder:[pSearchContact getSearchField]];

为了我的舒适,它做了太多的事情(即我不会在一行代码中嵌入这么多的功能——其中任何部分都可能出错或失控)。

做这样的事情怎么样:

NSWindow * myWindow = [self window];
if(myWindow)
{
    if(pSearchContact)
    {
        NSResponder * ourSearchField = [pSearchContact getSearchField];
        if(ourSearchField)
        {
            [myWindow makeFirstResponder: ourSearchField];
        } else {
            NSLog( @"ourSearchfield is nil; why?" );
        }
    } else {
        NSLog( @"pSearchContact is nil; why?" );
    }
} else {
    NSLog( @"myWindow is nil; why?" );
}

这也可能让您缩小焦点设置不适合您的原因。

于 2012-07-04T05:47:47.650 回答
0

响应较晚,但我遇到了类似的问题,通过取消选中refusesFirstResponderXcode/Interface Builder 来解决。

于 2015-10-14T17:55:15.713 回答