是否可以将图像用作 Cocoa 中文本字段的背景?如果是这样,怎么做?
2 回答
我不知道这是否是“正确”的方法,但首先想到的是创建一个 NSTextField 的自定义子类,它可能大致如下所示:
- (void)awakeFromNib
{
[self setDrawsBackground:NO];
}
- (void)drawRect:(NSRect)rect
{
[super drawRect:rect];
[self lockFocus];
[[NSImage imageNamed:@"<#image filename#>"] drawInRect:rect
fromRect:rect
operation:NSCompositeSourceOver
fraction:1.0];
[self unlockFocus];
}
同样,这只是基本部分的粗略轮廓。
无论如何,就像我说的那样,我不确定这是否真的是“正确”的方式(或者是否有“正确”的方式,就此而言),但这将为您的 NSTextField 提供背景图像.
编辑以回应约书亚的评论(我不会在那个小小的评论框中有足够的空间):
要将图像添加到您的项目中,您可以将其从任何位置拖到项目窗口中(项目窗口中间的文件主列表,尽管取决于您设置 Xcode 编辑环境的方式,这对你来说可能不同)。
为了子类NSTextField
化,你会想要创建一个新的 Objective-C 类文件(File -> New File…),但是编辑头文件,以便类继承自NSTextField
而不是NSObject
. 换句话说,您的头文件可能如下所示:
#import <Cocoa/Cocoa.h>
@interface BGImageTextField : NSTextField
{
}
@end
至于其余的代码,您可能希望将其添加到实现文件的主体中(BGImageTextField.m
例如),特别是在@implementation
and@end
关键字之间。
我还想提两点。首先,我建议阅读 Aaron Hillegass 撰写的Cocoa Programming for Mac OS X的副本——它涵盖了我刚刚学习过的大部分 Cocoa 基础知识,并且是一般学习 Cocoa 的最佳方法之一。其次,虽然我的方法有效,但它可能不是最好的方法——尤其是因为我最近才发现这篇文章,这似乎暗示了一种更好的扩展 NSTextField 的方法。
而不是继承 NSTextField,只需使背景颜色透明 [NSColor clearColor] 并将图像放在它后面。