Ho diversi pulsanti gialli creati utilizzando Inteface Builder. Tutti hanno lo stesso colore. Attualmente dichiaro il colore in ogni xib. Posso dichiararlo globalmente e riutilizzarlo su tutti gli xibs?Posso riutilizzare i colori in Interface Builder?
risposta
Più decisamente!
Creare un oggetto Singleton (si può chiamare OksanaColor
, per essere cool) ...
... o, se siete veramente pigri, di sola lettura UIColor
proprietà che è possibile accedere dal proprio delegato dell'app.
È inoltre possibile aggiungere una categoria su UIColor, in modo da poterlo utilizzare come quando si utilizza UIColor. Ad esempio nella mia app aggiungo un nuovo file chiamato ApplicationColors che contiene tutti i colori della mia app.
@interface UIColor (ApplicationColours)
+(UIColor *)savaColor;
@end
Implementazione:
@implementation UIColor (ApplicationColours)
+(UIColor *)savaColor
{
return [UIColor colorWithRed:228.0f/255.0f green:86.0f/255.0f blue:86.0f/255.0f alpha:1.0f];
}
@end
Poi per usarlo nella mia app, ho importare l'ApplicationColours.h e utilizzare la stessa di qualsiasi altro UIColor. cioè:
label.textColor = [UIColor savaColor];
Si potrebbe voler rendere + savaColor mantenere una variabile statica per quel colore, in modo che non crei una nuova istanza ogni volta. – NSResponder
Sì, buon pensiero @NSResponder non ci ha mai pensato :) –
Non voglio farlo in codice. Voglio impostare il generatore di interfacce interno. – Oksana
Ecco una semplice implementazione di una categoria di colori chiamato per UIColor
. Con questo codice nel progetto, UIColor
ricorderanno tutti i colori che si desidera salvare, e vi permetterà di accedere al vostro colori o colori di sistema proprio utilizzando +colorWithName:
@interface UIColor (namedColors)
+ (UIColor *) colorWithName:(NSString *) name;
+ (void) setColor:(UIColor *) color forName:(NSString *) name;
@end
static NSMutableDictionary *colorStorage;
@implementation UIColor (namedColors)
+ (NSMutableDictionary *) colorStorage
{
if (!colorStorage)
colorStorage = [[NSMutableDictionary alloc] initWithCapacity:10];
return colorStorage;
}
+ (UIColor *) colorWithName:(NSString *) name
{
UIColor *result =[[self colorStorage] valueForKey:name]; // See if we have a color with this name in the colorStorage.
if (result) return result;
SEL selector = NSSelectorFromString(name); // look for a class method whose selector matches the given name, such as "blueColor" or "clearColor".
if ([self respondsToSelector:selector] && (result = [self performSelector:selector]))
if ([result isKindOfClass:[self class]])
return result;
return nil;
}
+ (void) setColor:(UIColor *) color forName:(NSString *) name
{
[[self colorStorage] setValue:color forKey:name];
}
@end
Forse troppo complicato? Semplice '[UIColor myRedColor]' o '[UIColor anotherRedColor]' sarebbe sufficiente e più semplice, no? – Tricertops
Sì, si può fare questo.
Nella parte inferiore del popup del selettore colori in Interface Builder, è disponibile una riga di quadrati che è possibile utilizzare per memorizzare i colori per un uso successivo. Trascina un colore in esso dal rettangolo in cui il colore corrente viene visualizzato nella parte superiore del selettore di colori per memorizzarlo, quindi fai clic su un colore memorizzato in seguito per utilizzarlo.
Questo non ti permetterà di riapplicare i colori quando decidi di cambiarli. Ma questo è l'unico modo primitivo per salvare i colori per il riutilizzo manuale. – Tricertops
@ iMartin Hai ragione che questa è una preoccupazione, e non l'avevo presa in considerazione. Con alcuni hackery, puoi comunque scambiare un colore globalmente usando questo metodo. Se vuoi cambiare un colore attraverso lo storyboard, fai una ricerca e sostituisci tutte le occorrenze del tag che rappresentano quel colore nell'XML sottostante dello Storyboard (o di tutti gli XIB del tuo progetto). È un trucco, ma funzionerà, e non è qualcosa che dovrai fare spesso. –
Non possibile in Interface Builder. Inseriscilo nel codice, ad esempio creando una sottoclasse speciale del pulsante.
È possibile utilizzare la tavolozza dei colori di sistema per salvare il colore, ma è comunque necessario applicarlo a tutti i pulsanti ogni volta che si decide di modificarlo. Oppure puoi semplicemente usare Colori usati di recente nel selettore di colori, ma in entrambi i casi non c'è abbastanza dinamica.
Grazie per aver effettivamente risposto alla domanda. – KPM
Non credo che ci sia un modo per farlo interamente nel generatore di interfacce, sfortunatamente. Tuttavia, puoi venire abbastanza vicino con un po 'di codice. Il modo migliore che ho trovato per essere in grado di cambiare i colori in tutta l'applicazione in una sola volta è quello di sottoclasse l'elemento che si desidera colore (UILabel, per esempio) per impostare il colore all'inizializzazione:
@interface HuedUILabel : UILabel
@end
@implementation HuedUILabel
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Initialization code
self.textColor = [AppConfig primaryColor];
}
return self;
}
@end
Poi , impostare l'etichetta di avere una classe personalizzata in IB:
Ora, quando si desidera cambiare il colore di tutte le UILabels, è possibile farlo modificando il vostro uno def colore e non si devi ingombrare il tuo codice con un sacco di incarichi di comparsa.
- 1. Colori strani in XCode Interface Builder?
- 2. Posso spostare i vincoli di autolayout in Interface Builder?
- 3. iOS: colori definiti in Interface Builder diversi dai colori in Web View
- 4. Oggetti segnaposto in Interface Builder
- 5. UIView `readableContentGuide` in Interface Builder?
- 6. Interface Builder UIDatePicker
- 7. Impossibile connettere IBOutlet in Interface Builder
- 8. Come ruotare un UIImageView in Interface Builder?
- 9. Interface Builder Clipping Designable Views
- 10. Caratteri non visualizzati in Interface Builder
- 11. Vincolo "Larghezza uguale altezza" in Interface Builder
- 12. UISegmentedControl - modifica dell'altezza in Interface Builder
- 13. Come aggiungere MKUserTrackingBarButtonItem in Interface Builder
- 14. Impostazione dell'immagine di UIImageView in Interface Builder
- 15. UIAsembra, vedere il risultato in Interface Builder?
- 16. Funzionalità nascoste di Interface Builder?
- 17. Rimuovi l'autolayout (vincoli) in Interface Builder
- 18. Aggiornamento classe UIView in Interface Builder
- 19. Come si imposta stretchableImageWithLeftCapWidth in Interface builder?
- 20. eredita file xib in Interface Builder
- 21. NSTextField con NSNumberFormatter automatico in Interface Builder
- 22. Singleton in Interface Builder con ARC
- 23. Opzione "Aggiorna frequentemente" in Interface Builder
- 24. Ordinamento di scene in Xcode Interface Builder
- 25. Problemi con UITapGestureRecognizers in Interface Builder
- 26. Aggiunta di un'immagine di sfondo in Interface Builder
- 27. Classe sconosciuta **** nel file Interface Builder
- 28. Visualizzazione struttura scomparsa da Interface Builder
- 29. Apple Interface Builder: aggiunta sottoview a UIImageView
- 30. XCode Interface Builder mostra "Nessuna selezione" per tutti i file
Quale parte di "in Interface Builder" ha fatto in modo che ogni singola persona che ha risposto a questa domanda non capisca? Strano. –
@MarkAmery Ciò significa che l'unico modo per farlo è utilizzare _code_. – Tricertops
È davvero stupido che non ci sia modo di farlo. Chi vuole regolare un colore su 100 pagine uno per uno in IB? – Jonny