NSTextField:如何仅在聚焦时绘制背景

时间:2011-05-24 07:45:13

标签: cocoa nstextfield

我在一个窗口中放置了一个文本字段,我希望文本字段只在聚焦时绘制背景。 我知道窗口中的所有控件都共享一个字段编辑器。 我尝试了子类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;
}

1 个答案:

答案 0 :(得分:7)

我最近在tableView中做了这个。您需要使用自定义单元格和fieldEditor。具体而言,您需要在作为字段编辑器的setDrawsbackground:YES / NSText对象上调用NSTextView,并setBackground:来配置您选择的颜色。有两个地方可以设置自定义字段编辑器。

一个是在您已配置setUpFieldEditorAttributes:要使用的自定义NSTextFieldCell子类上实现NSTextField,另一个是使用窗口或窗口委托方法windowWillReturnFieldEditor:toObject:

请注意,如果第一种方法不适用于特定设置,有时您需要使用第二种方法,因为它在代码路径中较早进入。