我在一个窗口中放置了一个文本字段,我希望文本字段只在聚焦时绘制背景。 我知道窗口中的所有控件都共享一个字段编辑器。 我尝试了子类nstextfield并实现了becomeFirstResponder和resignFirstResponder。 并尝试使用自定义单例编辑器的窗口。
任何人都知道如何实现这个目标吗?
在NSWindow中,每个文本字段或按钮共享一个字段编辑器实例(单个NSTextView实例),因此当您单击文本字段时,textfield首先成为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;
}
答案 0 :(得分:7)
我最近在tableView中做了这个。您需要使用自定义单元格和fieldEditor。具体而言,您需要在作为字段编辑器的setDrawsbackground:YES
/ NSText
对象上调用NSTextView
,并setBackground:
来配置您选择的颜色。有两个地方可以设置自定义字段编辑器。
一个是在您已配置setUpFieldEditorAttributes:
要使用的自定义NSTextFieldCell
子类上实现NSTextField
,另一个是使用窗口或窗口委托方法windowWillReturnFieldEditor:toObject:
请注意,如果第一种方法不适用于特定设置,有时您需要使用第二种方法,因为它在代码路径中较早进入。