Pergunta

É possível usar uma imagem como um fundo para um campo de texto em Cocoa? Se sim, como?

Foi útil?

Solução

Eu não sei se esta é a maneira "correta" de fazê-lo, mas a primeira coisa que vem à mente seria fazer uma subclasse personalizada de NSTextField, que pode parecer mais ou menos assim:

- (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];
}

Mais uma vez, isso é um esboço apenas áspera das partes essenciais.

De qualquer forma, como eu disse, eu não tenho certeza se isso realmente a maneira "correta" de fazê-lo (ou se há mesmo uma maneira "correta", para que o assunto), mas isso vai lhe dar uma imagem de fundo para o seu NSTextField.

Editar em resposta ao comentário de Joshua (eu não vou ter espaço suficiente naquela pequena caixa de pequeno comentário):

Para adicionar a imagem em seu projeto, você arrastá-lo onde quer que seja na janela do projeto (a lista principal de arquivos no meio da janela do projeto, embora dependendo de como você configurar sua edição Xcode ambiente, isso pode ser diferente para você).

Para NSTextField subclasse, você iria querer criar um novo arquivo de classe Objective-C (Arquivo -> Novo arquivo ...), mas editar o cabeçalho de modo que as herda da classe de NSTextField vez de NSObject. Em outras palavras, o seu arquivo de cabeçalho pode ter esta aparência:

#import <Cocoa/Cocoa.h>

@interface BGImageTextField : NSTextField
{
}

@end

Como para o resto do código, que você gostaria de acrescentar que no corpo principal do arquivo de implementação (BGImageTextField.m, por exemplo), especificamente entre as palavras-chave @implementation e @end.

Eu também gostaria de mencionar duas coisas. Em primeiro lugar, eu recomendo pegar uma cópia de Programação Cocoa para Mac OS X , por Aaron Hillegass-cobre a maior parte dos princípios básicos de cacau que eu só passaram, e é uma das melhores maneiras de aprender Cacau em geral. Em segundo lugar, embora a minha abordagem funciona, provavelmente não é a melhor abordagem, especialmente desde que eu apenas recentemente encontrado este post , o que parece sugerir uma melhor forma de estender NSTextField.

Outras dicas

Em vez de subclassificação NSTextField, basta fazer a cor de fundo transparente [NSColor clearColor] e colocar a imagem por trás dele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top