Pergunta

Saudações,

Eu tenho um projeto de aplicativo baseado vista onde eu criei uma classe NSObject chamado "SquareClass". Agora, a partir de construtor de interface do Xcode, eu quero ser capaz de criar uma instância que "SquareClass" em um objeto quadrado com escopo global, de tal forma que, quando eu criar ações de quaisquer controles de interface do usuário (ou seja, caixas de texto, botões etc ... ), eu quero ser capaz de chamar métodos desse objeto dentro dessas acções.

exemplo:

(void)MyAction1:(id)color
{
   [square setColor:color];
}

(void)MyAction2:(id)width
{
   [square setWidth:width];
}

Como você pode ver, o objeto quadrado precisa ter um âmbito global. Este poder parece fácil ou talvez a maneira errada de fazê-lo para alguns de nós. Eu tenho olhar através da web, e meio que encontrou um caminho para um arquivo .nib, não para um arquivo .xib.

Qualquer sugestão seria muito apreciada. Muito obrigado.

Yohann.

ps:. Este é meu primeiro post SEMPRE, ser indulgente

Foi útil?

Solução

Em primeiro lugar, um arquivo NIB é, para todos os efeitos, o mesmo que um arquivo XIB; é apenas uma versão compilada de um arquivo XIB.

Agora, para criar um objeto derivado de NSObject no seu NIB / XIB, basta arrastar um NSObject da janela da biblioteca em seu arquivo. Em seguida, no Inspetor de identidade alterar a classe para sua classe personalizada.

Se você definir métodos como este:

- (IBAction)myAction:(id)sender

Você vai ser capaz de conectá-los no Interface Builder.

Dito tudo isso, é difícil dizer se o que você está fazendo é a coisa certa a fazer em tudo. Parece-me que você deve estar usando um NSViewController subclasse então dê uma olhada na documentação para isso.

Você também deve certificar que você entendeu o que ver, objetos de controlador e modelo são. Há uma abundância de literatura sobre o assunto.

Outras dicas

Se você criar uma subclasse UIView, então você pode fazer o dono do arquivo para o seu xib implementar a classe estendida. A partir desse ponto, simplesmente adicionar uma variável de instância à sua classe estendida para a praça. O último passo no processo é adicionar métodos para a sua classe se ligar a cada um dos controles de ações.

- (IBAction) pinSelected: (id)sender;

Depois de criar estes métodos (não se esqueça de fazê-los voltar IBAction, é realmente um alias para nula, mas age como uma dica para o Interface Builder), então você pode ligar seus controles ao método através do dono do arquivo (usando o controle + arrastar para estabelecer o link).

Boa sorte!

Eu encontrei como fazer o que eu precisava que não é feito dentro do arquivo XIB. É a maneira mais simples do que eu pensava, eventhough as sugestões acima são válidos.

Para usar o objeto quadrado, eu só tinha de fazer referência ao arquivo de cabeçalho:

 #import "square.h"

no SquareUIViewController.h e adicionar uma referência a um objeto quadrado:

Square *square;

Em seguida, no SquareUIController.m, eu só tenho que alocar / inicializar o objeto quadrado antes de fazer qualquer outra coisa:

(IBAction)myInit
{
square = [[Square alloc] init];
}

Agora eu posso usar os métodos do primeiro post E Voila!

ps: os críticos, o fogo até

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