Objective c 突出显示NSSearchField
我有一个NSView窗口,其中包含一个NSView,仅在某些特定情况下出现此NSView包含一个NSSearchField我想要的如果剪贴板上有数据,它将显示在searchField中,否则它将为空。我能够做到这一点我想要的是,如果searchField中有数据,它应该处于焦点我尝试了以下方法: 在NSViewController类中,有一个函数返回NSSearchField,它是一个类变量Objective c 突出显示NSSearchField,objective-c,nssearchfield,Objective C,Nssearchfield,我有一个NSView窗口,其中包含一个NSView,仅在某些特定情况下出现此NSView包含一个NSSearchField我想要的如果剪贴板上有数据,它将显示在searchField中,否则它将为空。我能够做到这一点我想要的是,如果searchField中有数据,它应该处于焦点我尝试了以下方法: 在NSViewController类中,有一个函数返回NSSearchField,它是一个类变量 -(NSSearchField*)getSearchField
-(NSSearchField*)getSearchField
{
return searchField;
}
在NSWindowController类中,我将其作为第一个响应程序,其中pSearchContact是NSViewController类的实例变量
[[self window] makefirstResponder:[pSearchContact getSearchField]];
它运行平稳,但我不知道为什么searchField没有得到关注
只有当searchField是NSWindow的一部分时,它才会成为第一响应者,因为在我的例子中,searchField位于NSWindow中的NSView中
提前感谢您的问题有点让人困惑,但我认为您的问题可以归结为“为什么我永远不能让我的搜索字段成为焦点?” 这一行代码:
[[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?" );
}
这可能还允许您缩小焦点设置不适用于您的范围。延迟响应,但我遇到了一个类似的问题,通过在Xcode/Interface Builder中取消选中
拒绝FirstResponder
,解决了这个问题。我也尝试了您的代码,但它仍然不起作用。没有一个值为空(MyWindow、pSearchContact和ourSearchField)直到[MyWindow makeFirstResponder:ourSearchField];这意味着它正在将searchField设置为FirstResponder,但我看不到它的焦点。