Domanda

Prima di tutto; Sono un principiante COMPLETO presso Cocoa, quindi per favore mettiti in contatto con me per avermi chiesto che sono sicuro che sia una domanda nuova e insensata.

La mia situazione è la seguente: voglio espandere la funzionalità di NSTextField. Tra le cose che voglio raggiungere è:

Modifica dell'aspetto del cursore.

Rilevare quando il testo raggiunge un certo numero di caratteri e quindi colorare il testo dopo tale limite in modo diverso. *

Con mia grande frustrazione dopo aver trascorso un po 'di tempo a cercare su google, trovo centinaia di hit che semplicemente dichiarano "Sublass NSTextField e usano questo codice", e con mia umiliazione mi sono trovato incapace di capire esattamente come farlo.

Sarei estremamente grato se qualcuno potesse darmi un esempio funzionante di una sottoclasse che realizza una delle due cose che ho elencato sopra e istruzioni * su come implementare il codice in modo da poter provare a capire come funziona guardando un vero codice live.


Sono estremamente dispiaciuto per la mia risposta tardiva!

Chiedo scusa a tutti voi. Ho un bambino colico a casa, e come tu (o almeno quelli di voi che hanno figli) potete immaginare che questo occupi molto del vostro tempo disponibile. Grazie a tutti per le risposte.

Vedo che uno dei miei problemi principali è che non ho una comprensione sufficiente di delegati e punti vendita. Ho acquistato il libro raccomandato qui (e in molti altri posti. Una specie di "Bibbia" che raccolgo) e lo sto esaminando mentre parliamo nelle poche ore silenziose che ho in questi giorni. :)

Ma anche se vedo che sarà uno strumento indispensabile per me, ottengo comunque la maggior comprensione dallo studio degli esempi piuttosto che dalla lettura della teoria * e quindi sarei estremamente grato se qualcuno creasse un progetto con una sottoclasse adeguata di la classe pertinente poiché ho capito che probabilmente non dovrei estendere la classe NSTextfield?

Contrassegnerei istantaneamente il post di Mark Thalmans come risposta, poiché sono sicuro che sia un vero "quotazione per i manichini" risposta, ma terrò duro per alcuni giorni poiché mi piacerebbe davvero un file da esaminare. Ma non sono ingrato!

Oh, e; Per favore, credetemi ragazzi quando dico che non sono così inutile nelle lingue che conosco davvero. È solo che questi concetti con Interface Builder e la connessione GUI al codice mi sono sconosciuti. Di solito scrivo solo il codice e lo conservo.


* Sì, il mio primo piccolo progetto di formazione è davvero un'utilità Twitter.

* Come un bambino

* Non che leggere la teoria non abbia avuto un valore eccezionale anche per me. Non sarei dove sono senza la guida definitiva di Colin Moock su AS3

È stato utile?

Soluzione

Martin,

Ho iniziato con il " Nuovo file " finestra di dialogo e ha scelto " Cacao " a sinistra e poi classe Objective-C.

Questo genererà il seguente codice, senza i commenti. Quindi tutto ciò che devi fare è cambiare l'oggetto NSO nell'interfaccia " @ interface " riga dell'intestazione a " NSTextView " e hai una sottoclasse funzionante. Se stai usando XCode 3.0 puoi andare a Interface Builder e cambiare la classe del tuo NSTextField in " MyTextView " ;.

Dovresti anche prendere il libro di Aaron Hillegass " Cocoa Programming per Mac OS X, Third Edition " È stato aggiornato ape per Leopard, se non lo hai già fatto.

Buona fortuna.


#import <Cocoa/Cocoa.h>


@interface MyTextView : NSTextView {
 // Outlets & Members go here
}
// Actions & messages go here
@end


#import "MyTextView.h"


@implementation MyTextView

@end

Altri suggerimenti

setInsertionPointColor: si occuperà di impostare il colore del cursore, e l'uso dei metodi delegati sarebbe il modo migliore per colorare il testo dopo che il numero di caratteri cambia. In generale, molte lezioni di cacao sono così; puoi sottoclassarli, ma la maggior parte delle funzionalità che devi modificare sono in metodi delegati.

NSTextField è speciale, perché in realtà non implementa la modifica del testo. Questo è fatto da un NSTextView condiviso (per finestra), noto come editor di campi . È possibile fornire un editor di campi speciale per un determinato NSTextField . Questo viene fatto canonicamente sottoclassando NSWindow (!) E sovrascrivendo -fieldEditor: forObject: . Quando stavo cercando questo, però, ho trovato il metodo NSTextFieldCell & # 8217; s -setUpFieldEditorAttributes: , che sembra come se potesse restituire un editor di campi diverso da quello è stato consegnato.

Lettura consigliata: Argomenti di controllo e programmazione cellulare per Cocoa , Panoramica del sistema di testo .

  1. Se devi davvero sottoclassarlo, devi sottoclassare NSTextFieldCell . Le informazioni su NSCells sono disponibile online .

  2. Non eseguire la sottoclasse della cella se non assolutamente necessario. Utilizza i metodi delegati .

  3. Almeno il colore può essere cambiato usando attacchi di NSTextField , usa quelli.

Potresti anche essere in grado di ottenere alcune delle funzionalità richieste con un formatter.

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