问题描述
|
我将文本字段放在窗口中,并且希望文本字段仅在聚焦时才绘制背景。
我知道窗口中的所有控件共享一个字段编辑器。
我尝试了子类nstextfield并实现了成为firstFirstResponder和resignFirstResponder。
并尝试使用自定义单例编辑器作为窗口。
有人知道如何实现这一目标吗?
在NSWindow中,每个文本字段或按钮都共享一个字段编辑器实例(一个单例NSTextView实例),因此,当您单击该文本字段时,该文本字段首先成为firstResponser,然后将其快速传递给共享字段编辑器。因此,当文本字段失去焦点时,将永远不会调用该文本字段的resignFirstResponder(因为字段编辑器现在是FirstResponder)。
您可以在NSWindow API中查看fieldEditor:forObject:。
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSWindow_Class/Reference/Reference.html#//apple_ref/occ/instm/NSWindow/fieldEditor:forObject:
解:
(谢谢Michael Gorbach)
在我的窗口控制器中
- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)anObject
{
NSText *text = [sender fieldEditor:YES forObject:self];
if(text&&[anObject isKindOfClass:[MyCustomTextField class]])
{
[text setBackgroundColor:[NSColor whiteColor]];
[text setDrawsBackground:YES];
}
return text;
}
解决方法
我最近在tableView中这样做。您需要使用自定义单元格和fieldEditor。具体来说,您需要在字段编辑器
NSText
/NSTextView
对象上调用setDrawsbackground:YES
,并调用setBackground:
来配置选择的颜色。有两个地方可以设置自定义字段编辑器。
一种是在配置了NSTextField
的自定义NSTextFieldCell
子类上实现setUpFieldEditorAttributes:
,另一种是使用窗口或窗口委托方法windowWillReturnFieldEditor:toObject:
。
请注意,如果第一种方法不适用于特定设置,则有时您需要使用第二种方法,因为它在代码路径中更早进入。