3

是否可以将图像用作 Cocoa 中文本字段的背景?如果是这样,怎么做?

4

2 回答 2

4

我不知道这是否是“正确”的方法,但首先想到的是创建一个 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例如),特别是在@implementationand@end关键字之间。

我还想提两点。首先,我建议阅读 Aaron Hillegass 撰写的Cocoa Programming for Mac OS X的副本——它涵盖了我刚刚学习过的大部分 Cocoa 基础知识,并且是一般学习 Cocoa 的最佳方法之一。其次,虽然我的方法有效,但它可能不是最好的方法——尤其是因为我最近才发现这篇文章,这似乎暗示了一种更好的扩展 NSTextField 的方法。

于 2009-04-19T20:40:25.640 回答
3

而不是继承 NSTextField,只需使背景颜色透明 [NSColor clearColor] 并将图像放在它后面。

于 2009-04-20T18:19:22.773 回答