sirve sesion que para online manager iniciar gratis goodbarber descargar crear como app aplicaciones objective-c ios xcode

objective-c - sesion - goodbarber gratis



¿Cuál es el método recomendado para diseñar una aplicación iOS? (7)

¿Cuál es el método recomendado para diseñar una aplicación iOS? Por ejemplo, si hay varias etiquetas o vistas de texto, ¿cómo actualizar el estilo / color de fuente en un lugar puede actualizar el estilo / color en todos los demás lugares?

Sé que la subclasificación podría ser de una manera ... ¿hay alguna otra manera?


Es posible que tengas que mirar esta biblioteca. Es compatible con múltiples temas / pieles sobre la marcha. Soporta imágenes y colores actualmente. El soporte de fuentes se añadirá en el futuro.

github.com/charithnidarsha/MultiThemeManager


Francamente, la mejor manera de hacerlo es usar Interface Builder. Si bien puede parecer agradable cambiar una constante en algún lugar del código y hacer que toda la aplicación cambie los estilos, nunca funciona de esa manera. Aquí están mis razonamientos:

1) Los desarrolladores no escriben el código de la interfaz como lo hace el creador de la interfaz. Interface Builder es una herramienta que ha sido refinada, probada y tratada durante años . Ofrece fuentes, alineación de texto, sombras, etc. Es compatible con versiones anteriores tan atrás como usted quisiera. Proporciona una forma muy sencilla para que cualquier número de desarrolladores y diseñadores se incorporen y trabajen en algo muy sencillo.

2) Siempre hay casos de borde que deberás tener en cuenta. Claro, una constante simple hará lo que quieras la mayor parte del tiempo, pero eventualmente tendrás que piratear algo aquí y colar algo allí. El código de interfaz "simple" que escribiste para comenzar crecerá y crecerá. Otros desarrolladores deberán mantener ese código. Tendrás que mantener ese código. Tendrá que archivar y corregir errores, modificar esto, excepto que, etc. Se convertirá inevitablemente en un montón de desorden.

3) Cuanto más código escribas, más errores escribes. Interface Builder es para construir el ''look'' de la mayoría de las aplicaciones iOS. Utilízalo No te pongas demasiado listo.

NOTA: entiendo que el generador de interfaz no puede hacer todo para todas las aplicaciones. Hay casos en que codificar una interfaz es la única solución. Esta respuesta es simplemente una "mejor práctica" general que uso en la mayoría de mis aplicaciones.


Podría importar un archivo de encabezado estándar en todos sus controladores con varias constantes configuradas para el estilo ... ejemplo:

Styles.h

#define kFontSize 14 #define kFontFamily @"Helevetica"

Controlador

#import "Styles.h" // at the top myLabel.font = [UIFont fontWithName:kFontFamily size:kFontSize];

Personalmente, creo que Interface Builder es la mejor manera de diseñar, sin embargo, esto responde directamente a su pregunta.


Puede utilizar una abstracción de terceros de UIAppearance:

El uso de un Storyboard tiene muchos beneficios, pero muchas opciones de estilo no están disponibles, entre ellas, las fuentes personalizadas. Si desea una IU muy personalizada, necesitará un código de estilo para que esto suceda.


Similar a la idea de Alex, puedes crear una clase estática llamada ThemeManager:

typedef enum { defaultStyle, redStyle, } ThemeStyles; @interface Level : NSObject { ThemeStyles currentTheme; }

Todas las clases que pueden ser temáticas importarán ThemeManager. Luego, puedes crear métodos como:

+ (UIColor*) fontColor;

Que otras clases llamarían cuando quieren un color para su fuente. Luego, si desea cambiar los temas, puede implementar fontColor como:

+ (UIColor*) fontColor { switch (currentTheme) { case defaultStyle: return [UIColor blackColor]; case redStyle: return [UIColor redColor]; } }

Cuando desee cambiar el tema, puede hacer que ThemeManager implemente un método como:

+ (void) changeTheme:(ThemeStyles)newTheme { currentTheme = newTheme; }


Yo uso plistas. Al igual que localizo cadenas, utilizo el mismo procedimiento para cambiar temas. Codifiqué un singleton que carga una lista de tema actual y una lista de reserva. Luego sustituyo los nombres de los recursos con teclas y funciones de macro que extraen el nombre real del recurso del singleton.

Contras: debe configurar el recurso para cada elemento, no solo configurarlo en el NIB.
Ventajas: una vez que hayas terminado, la mayor parte del siguiente tema involucra photoshop y compañeros de texto, no IB o código.


Actualización: recomendaría comenzar entendiendo UIAppearance API de UIAppearance y viendo qué tan bien se adaptan a sus necesidades. UIAppearance es una forma conveniente de proporcionar una estilización predeterminada personalizada de atributos de controles específicos en múltiples niveles (por ejemplo, globalmente o contextualmente).

Mi respuesta original, que es anterior a la disponibilidad de UIAppearance :

ya que estamos trabajando con un lenguaje basado en objetos ...

para la implementación, depende de cómo desea que se comporte / ejecute. cuando la implementación no sea trivial, a menudo crearé un protocolo. Podría usar métodos de clase o métodos de instancia y optimizar significativamente estos tipos para su uso porque crea menos colores intermedios, fuentes, imágenes, etc.

Una interfaz básica podría tomar la forma:

@protocol MONLabelThemeProtocol - (UIFont *)labelFont; - (UIColor *)labelTextColor; - (UITextAlignment)labelTextAlignment; // ... @end @protocol MONTableViewCellThemeProtocol - (UIFont *)tableViewCellFont; - (UIColor *)tableViewCellTextColor; - (UIImage *)tableViewCellImage; - (NSInteger)tableViewCellIndentationLevel; - (CGFloat)tableViewCellIndentationWidth; // ... @end

entonces un simple tema de amalgama podría ser declarado así:

@interface MONAmalgamateThemeBase : NSObject < MONLabelThemeProtocol, MONTableViewCellThemeProtocol > { @protected /* labels */ UIFont * labelFont; UIColor * labelTextColor; UITextAlignment labelTextAlignment; // ... /* table view cells */ UIFont * tableViewCellFont; UIColor * tableViewCellTextColor; UIImage * tableViewCellImage; NSInteger tableViewCellIndentationLevel; CGWidth tableViewCellIndentationWidth; // ... } @end

en este ejemplo, el amalgamate define los captadores y dealloc y espera que las subclases inicialicen las variables de instancia. también podría admitir una inicialización lenta si los tiempos de inicialización son altos (por ejemplo, utiliza muchas imágenes).

entonces una especialización podría tomar la forma:

@interface MONDarkTheme : MONAmalgamateThemeBase @end @implementation MONDarkTheme - (id)init { self = [super init]; if (nil != self) { labelFont = [[UIFont boldSystemFontOfSize:15] retain]; labelTextColor = [[UIColor redColor] retain]; // and so on... } return self; } // ... @end /* declare another theme and set it up appropriately */ @interface MONLightTheme : MONAmalgamateThemeBase @end

luego simplemente reutilice las instancias del tema (por ejemplo, MONDarkTheme) en toda la aplicación para estilizar las vistas. Si tienes muchos temas o no son triviales de construir, entonces es posible que desees crear una colección de temas (administrador de temas). La fusión también podría tomar un parámetro, como iniciar con tema si sus necesidades son simples. Incluso puede configurar objetos para registrarse para cambios en temas, si necesita soporte para cambios dinámicos.

finalmente, puede crear un aplicador de temas simple para hacer la vida más fácil, como por ejemplo:

@interface UILabel (MONThemeAdditions) - (void)mon_applyMONLabelTheme:(id<MONLabelTheme>)theme; @end @implementation UILabel (MONThemeAdditions) - (void)mon_applyMONLabelTheme:(id<MONLabelTheme>)theme { assert(theme); if (nil == theme) return; self.font = [theme labelFont]; self.textColor = [theme labelTextColor]; self.textAlignment = [theme labelTextAlignment]; } @end