Domanda

Saluti,

Ho un progetto di applicazione vista basata dove ho creato una classe NSObject chiamato "SquareClass". Ora, dal costruttore di interfaccia del Xcode, voglio essere in grado di istanziare che "SquareClass" in un oggetto quadrato con ambito globale, in modo tale che, quando creo le azioni da qualsiasi controlli dell'interfaccia utente (ad esempio caselle di testo, pulsanti, ecc ... ), voglio essere in grado di chiamare i metodi di tale oggetto all'interno di tali azioni.

Esempio:

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

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

Come si può vedere, l'oggetto quadrato deve avere una portata globale. Questo potrebbe sembra facile o forse il modo sbagliato di farlo per alcuni di noi. Ho guardo attraverso il web, e un pò trovato un modo per un file pennino, non per un file .xib.

Ogni suggerimento sarebbe molto apprezzato. Grazie mille.

Yohann.

ps: Questo è il mio primo post MAI, essere indulgente

.
È stato utile?

Soluzione

In primo luogo, un file NIB è, a tutti gli effetti, lo stesso come file XIB; è solo una versione compilata di un file XIB.

Ora, per creare un oggetto derivato da NSObject in NIB / XIB, è sufficiente trascinare un NSObject dalla finestra della biblioteca nel file. Poi sulla Inspector Identità cambiare la classe per classe personalizzata.

Se si definisce metodi come questo:

- (IBAction)myAction:(id)sender

sarete in grado di agganciarli in Interface Builder.

Detto questo, è difficile dire se quello che stai facendo è la cosa giusta da fare a tutti. Sembra a me come si dovrebbe utilizzare una sottoclasse NSViewController in modo da avere uno sguardo alla documentazione per questo.

Si dovrebbe anche essere sicuri di capire che cosa vista, controller e modello oggetti sono. C'è un sacco di letteratura su questo.

Altri suggerimenti

Se si crea una classe che estende UIView, allora si può fare il proprietario del file per il vostro XI ter implementare la classe estesa. Da quel punto è sufficiente aggiungere una variabile di istanza per la classe estesa per la piazza. L'ultima fase del processo è quello di aggiungere metodi alla classe di legarsi a ciascuno dei controlli alle azioni.

- (IBAction) pinSelected: (id)sender;

Una volta creato questi metodi (assicuratevi di farli tornare IBAction, in realtà è un alias per vuoto, ma agisce come un suggerimento per Interface Builder), allora è possibile associare i controlli per il metodo attraverso il proprietario del file (utilizzando il controllo + trascinamento per stabilire il collegamento).

Buona fortuna!

Ho trovato come fare quello che mi serviva, che non è fatto all'interno del file XIB. È il modo più semplice di quello che ho pensato, vedevamo i suggerimenti sopra riportati sono validi.

Per poter utilizzare l'oggetto quadrato, dovevo solo fare riferimento al file di intestazione:

 #import "square.h"

nel SquareUIViewController.h e aggiungere un riferimento a un oggetto quadrato:

Square *square;

Poi nel SquareUIController.m, non mi resta che destinare / inizializzare l'oggetto piazza prima di fare qualsiasi altra cosa:

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

Ora posso utilizzare i metodi del primo post E voilà!

PS: i critici, il fuoco su

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top