Pergunta

Eu criei uma subclasse de NSView para desenhar uma imagem como um padrão:

@interface CePatternView : NSView
{
    NSImage*    image;
    id      observableObjectForImage;
    NSString*   keyPathForImage;
}

@end

Eu implementei o seguinte para expor ligações:

+ (void)initialize
{
    // Expose the "image" binding to IB.
    [self exposeBinding:@"image"];  
}

- (Class)valueClassForBinding:(NSString *)binding
{
    if([binding isEqualToString:@"image"])
        return [NSImage class];
    return nil; // Unknown binding
}

Infelizmente, o imagem ligação não aparecer na Interface Builder.

Do que eu realmente tem que criar uma IBPlugin para expor ligações no Interface Builder? Isso só parece maneira exagero para uma exibição personalizada que eu não faço plano para reutilização.

Foi útil?

Solução

Resposta ao título: Não, você pode vincular uma exibição personalizada sem um IB plug-in (por fazê-lo no código)
. Resposta à pergunta no corpo pergunta: Sim, você precisa de um plug-in IB para expor o obrigatório em IB

.

Seu código não for executado dentro Interface Builder a menos que você colocá-lo em Interface Builder, e essa mensagem exposeBinding: é o seu código. Portanto, você precisa colocá-lo em Interface Builder. Isso significa escrever um plug-in IB.

Além disso, IB plug-ins não são o mesmo que o antigo paletas IB. Plug-ins exigem IB 3 e são muito mais fáceis de criar. Paletas exigem IB 2 e foram dolorosas para criar.

Outras dicas

Eu simplesmente obrigado meu objeto controlador para o meu objeto de exibição usando um diferente, padrão de ligação (por exemplo, toolTip), em seguida, editar o arquivo XIB usando um editor de texto e alterou o XML manualmente.

A partir daí, as obras de ligação corretamente e até mesmo mostra-se em Interface Builder corretamente a bota!

Não, você pode usar o método

bind:toObject:withKeyPath:options:

para estabelecer a sua ligação através de programação. Eu acredito que você tem que criar uma paleta IB para obter as ligações para aparecer na Interface Builder, mas para um one-off de classe I não pretende reutilizar, eu nunca incomodado.

Se você consegue fazer as ligações manualmente, você vai salvar um monte de tempo. Criando personalizados paletas IB é um monte de trabalho em comparação com algumas linhas de código de ligação manual. Mas, se as suas necessidades exigem um costume paleta IB, em seguida, gostaria de começar por rever o que a subclasse NSView exigirá, codificação-wise. Um ótimo lugar para começar a procurar é o site da Crawford nas ligações:

http://homepage.mac.com/mmalc/CocoaExamples/controllers.html

Eu usei-o muito ao longo dos últimos dois anos, ele tem ajudado muito com os meus personalizados IB objetos paleta e com problemas de ligação em geral. Há um exemplo em seu site detalhando especificamente costume NSView de com ligações personalizadas.

Outra coisa a nota, é que a sua exibição personalizada também terá que trabalhar no ambiente Interface Builder. Existem algumas pequenas correções que precisam ser postas em prática em seu código ligações em sua costume NSView objeto para que ele funciona e se liga adequadamente no Interface Builder. Esses detalhes também são anotados no site da Crawford:

http://homepage.mac.com/mmalc/CocoaExamples/controllers .html # ibBindings

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