【发布时间】:2011-05-24 07:45:13
【问题描述】:
我在窗口中放置了一个文本字段,并且我希望文本字段仅在获得焦点时绘制背景。 我知道窗口中的所有控件共享一个字段编辑器。 我尝试了子类 nstextfield 并实现了 becomeFirstResponder 和 resignFirstResponder。 并尝试对窗口使用自定义单例编辑器。
有人知道如何实现吗?
在 NSWindow 中,每个 textfield 或 button 共享一个字段编辑器实例(一个单例 NSTextView 实例),因此当您单击 textfield 时,textfield 首先成为 firstResponser,然后快速将其传递给共享字段编辑器。所以当textfield失去焦点时,永远不会调用textfield的resignFirstResponder(因为现在的field editor是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:
解决方案: (谢谢,迈克尔·戈尔巴赫) 在我的窗口控制器中
- (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;
}
【问题讨论】:
标签: cocoa nstextfield