2009-03-29 12 views
49

Después de leer un poco, descubrí que puede personalizar el texto y el color en un control UISwitch. Tengo curiosidad por saber si estos métodos causarán problemas al intentar que mi aplicación sea aprobada e incluida en la App Store.Aprobación personalizada de UISwitch y App Store

Código de la muestra tomada de iPhone Developer's Cookbook Sample Code:

// Custom font, color 
switchView = [[UICustomSwitch alloc] initWithFrame:CGRectZero]; 
[switchView setCenter:CGPointMake(160.0f,260.0f)]; 
[switchView setLeftLabelText: @"Foo"]; 
[switchView setRightLabelText: @"Bar"]; 
[[switchView rightLabel] setFont:[UIFont fontWithName:@"Georgia" size:16.0f]]; 
[[switchView leftLabel] setFont:[UIFont fontWithName:@"Georgia" size:16.0f]]; 
[[switchView leftLabel] setTextColor:[UIColor yellowColor]]; 

Respuesta

40

esto no va a crear problemas con la presentación a la tienda de aplicaciones. Se le permite usar controles personalizados o versiones alteradas de los controles incorporados siempre que no use ninguna API privada (no documentada) para construir/alterar estos widgets.

+3

¿Hay alguna/declaraciones oficiales a prueba de esto que puedo mostrar a mis gerentes? – Tomen

+16

Casi todas las aplicaciones en la tienda de aplicaciones son prueba de esto. – lfalin

+0

@lfalin, bueno eso es un poco exagerado. En realidad, no sabe que las aplicaciones aprobadas en la tienda en realidad están personalizando 'UISwitch', sin el código fuente. Esas aplicaciones podrían personalizar un 'UIButton' o un' UISlider' u otra cosa. La pregunta era específicamente sobre 'UISwitch' y creo que lo que el póster estaba diciendo era si parte de la personalización podría usar API privadas o no. También encontré ejemplos para personalizar controles que dependían de características no documentadas que cambiaban en versiones posteriores del sistema operativo y, por lo tanto, se rompían. Pero, fueron aprobados en mis aplicaciones por Apple. – Nate

-30

Esto CAUSA problemas con la aprobación de su aplicación. pregúntame cómo sé: P

Acabo de recibir una desagradable nota de Apple. Estamos en el proceso de buscar una alternativa.

+7

esto está completamente mal – zpesk

+12

Por favor, elabore para que sepamos por qué su aplicación tuvo problemas. – JoePasq

7

Eche un vistazo al control UISwitch personalizado que construí para permitirme cambiar el color de fondo del control. Puede usar el mismo método para cambiar el texto, la fuente o el color del texto muy fácilmente.

custom uiswitch control

El código está disponible en Github e incluye un PSD que se utiliza para construir tres diferentes archivos PNG que utiliza el control. Puede modificar el contenido de la psd para recrear los archivos png en el formato que desee. Cambia eso al control y vete.

+0

Esto es genial! Un cambio que sugeriría sería permitir que se establezca un fondo diferente para cada interruptor en el momento de la inicialización. En algunas aplicaciones, no tiene sentido tener todos los conmutadores basados ​​en el mismo gráfico. – radven

+8

el enlace está roto :( – Nate

16

Puede disfrutar de mi implementación de un conmutador personalizado (de código abierto y de uso gratuito) ... permite configurar el interruptor para mostrar cualquier texto, o subclases fácilmente para dibujar sus propias imágenes personalizadas en la pista ... . http://osiris.laya.com/projects/rcswitch/

este interruptor hace que sea fácil de dibujar una imagen en lugar de texto: subclase de la clase interruptor principal y reemplazar el método sorteo como este, y su imagen se anima automáticamente:

- (void)drawUnderlayersInRect:(CGRect)aRect withOffset:(float)offset inTrackWidth:(float)trackWidth 
{ 
    [onImage drawAtPoint:CGPointMake(floorf(aRect.origin.x + 13 + (offset - trackWidth)), floorf((self.bounds.size.height - onImage.size.height)/2.0))]; 
    [offImage drawAtPoint:CGPointMake(floorf(aRect.origin.x + 15.0 + (offset + trackWidth)), ceilf((self.bounds.size.height - offImage.size.height)/2.0))]; 
} 
+0

Por cierto, para aquellos que descargaron la versión 1.0 original de RCSwitch, es posible que desee considerar la actualización a la versión 1.1 que publiqué. Parece que hay algunos errores de dibujo con imágenes elásticas que solo aparecen en el iPhone (parece que están arreglados en el iPad, por lo que tal vez estén solucionados en iPhone OS 3.2). Esta actualización soluciona estos problemas. –

-1

de la documentación de Apple : -

Utiliza la clase UISwitch para crear y administrar los botones de activación/desactivación que ver, por ejemplo, en las preferencias (Configuraciones) para servicios tales como Modo de avión. Estos objetos se conocen como interruptores.

La clase UISwitch declara una propiedad y un método para controlar su estado on/off . Al igual que con UISlider, cuando el usuario manipula el control switch ("lo voltea") se genera un evento UIControlEventValueChanged, que da como resultado el control (si está configurado correctamente) al enviar un mensaje de acción .

La clase UISwitch no se puede personalizar.

Apple dice que no son personalizables, lo que puede significar que se rechace su aplicación.

0

En las Human Interface Guidelines de Apple, en la documentación del interruptor, estado de Apple:

utilizar un interruptor en una fila de la tabla para dar a los usuarios dos diametralmente opciones simples, opuestas que determinan el estado de algo, como sí/no o encendido/apagado. Use un par predecible de valores para que los usuarios no tengan para deslizar el control y descubrir cuál es el otro valor.

Así que, sí, está bien cambiar el texto siempre que use un par predecible de valores (como yes/no).

0

No hay necesidad de UISwitch subclase en absoluto. Una solución bastante simple que implementé se subclasifica UIView y en evento táctil alternar entre dos imágenes (ON/OFF) con transición de diapositivas eso es todo.

Saludos Dhanesh

1

acabo de crear este punto de vista, y vi a usted pregunta

espero que esto ayude

el archivo .h:

#import <UIKit/UIKit.h> 

@interface EDSwitch : UIView 
{ 
    UIButton* onButton,*offButton; 
    UIImageView* bg; 
} 

- (id)initWithText:(NSString*)on andText:(NSString*)off andDelegate:(id)delegate andOnSelector:(SEL)onSelector andOffSelector:(SEL)offSelector andBackgroundImage:(UIImage*)bgImage andStartingValue:(BOOL)b; 

@end 

y el archivo .m:

#import "EDSwitch.h" 

@implementation EDSwitch 

- (id)initWithText:(NSString*)on andText:(NSString*)off andDelegate:(id)delegate  andOnSelector:(SEL)onSelector andOffSelector:(SEL)offSelector andBackgroundImage:  (UIImage*)bgImage andStartingValue:(BOOL)b 
{ 
self = [super initWithFrame:CGRectZero]; 
if (self) { 
    UILabel* onLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 8, 50, 20)]; 
    onLabel.text = on ; 
    onLabel.tag = 1; 
    onLabel.font = [UIFont fontWithName:kCalibri size:15]; 
    onLabel.textAlignment = UITextAlignmentCenter; 
    onLabel.textColor = [UIColor colorFromHexString:@"#009dd0"]; 
    onLabel.backgroundColor = [UIColor clearColor]; 
    [onLabel sizeToFit]; 
    [onLabel setWidth:onLabel.frame.size.width + 4]; 


    UILabel* offLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 8, 50, 20)]; 
    offLabel.text = off ; 
    offLabel.tag = 1; 
    offLabel.textAlignment = UITextAlignmentCenter; 
    offLabel.font = [UIFont fontWithName:kCalibri size:15]; 
    offLabel.textColor = [UIColor colorFromHexString:@"#009dd0"]; 
    offLabel.backgroundColor = [UIColor clearColor]; 
    [offLabel sizeToFit]; 
    [offLabel setWidth:offLabel.frame.size.width + 4]; 

    float high = MAX([offLabel.text sizeWithFont:offLabel.font].width,[onLabel.text sizeWithFont:onLabel.font].width) + 10; 

    onButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [onButton addTarget:self action:@selector(toggled:) forControlEvents:UIControlEventTouchUpInside]; 
    [onButton addTarget:delegate action:onSelector forControlEvents:UIControlEventTouchUpInside]; 
    offButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [offButton addTarget:self action:@selector(toggled:) forControlEvents:UIControlEventTouchUpInside]; 
    [offButton addTarget:delegate action:offSelector forControlEvents:UIControlEventTouchUpInside]; 

    [onButton setWidth:high]; 
    [onButton setX:0]; 
    [onButton addSubview:onLabel]; 
    [onLabel setWidth:high]; 
    [onLabel setX:0]; 

    [offButton setWidth:high]; 
    [offButton addSubview:offLabel]; 
    [offButton setX:high]; 
    [offLabel setWidth:high]; 
    [offLabel setX:0]; 

    bg = [[UIImageView alloc] initWithImage:bgImage]; 

    self.frame = CGRectMake(200, 200 , (high*2), 34); 
    self.layer.borderColor = [[[UIColor colorFromHexString:@"#009dd0"] colorWithAlphaComponent:0.5] CGColor]; 
    self.layer.borderWidth = 0.5; 
    self.layer.cornerRadius = 5; 
    [self setX:[UIApplication sharedApplication].keyWindow.frame.size.width - self.frame.size.width - 8]; 

    [self addSubview:bg]; 

    [bg setWidth:[self getWidth]]; 
    [bg setHeight:[self getHeight]]; 

    [self addSubview:onButton]; 
    [self addSubview:offButton]; 

    [onButton setHeight:[self getHeight]]; 
    [offButton setHeight:[self getHeight]]; 

    if(b){ 
     [onButton setBackgroundColor:[UIColor clearColor]]; 
     [offButton setBackgroundColor:[UIColor whiteColor]]; 
    } 
    else{ 
     [onButton setBackgroundColor:[UIColor whiteColor]]; 
     [offButton setBackgroundColor:[UIColor clearColor]]; 
    } 
} 
return self; 
} 

-(void)toggled:(UIButton*)sender{ 
if(sender == onButton){ 
    UILabel* l = (UILabel*)[onButton viewWithTag:1]; 
    l.textColor = [UIColor grayColor]; 
    [onButton setBackgroundColor:[UIColor clearColor]]; 
    l = (UILabel*)[offButton viewWithTag:1]; 
    l.textColor = [UIColor colorFromHexString:@"#009dd0"]; 
    [offButton setBackgroundColor:[UIColor whiteColor]]; 

} 
else{ 
    UILabel* l = (UILabel*)[offButton viewWithTag:1]; 
    l.textColor = [UIColor grayColor]; 
    [offButton setBackgroundColor:[UIColor clearColor]]; 
    l = (UILabel*)[onButton viewWithTag:1]; 
    l.textColor = [UIColor colorFromHexString:@"#009dd0"]; 
    [onButton setBackgroundColor:[UIColor whiteColor]]; 
} 
} 

@end 

uso:

[[UIApplication sharedApplication].keyWindow addSubview:[[EDSwitch alloc] initWithText:@"aksdjaksdjh" andText:@"dasjdsaj" andDelegate:self andOnSelector:@selector(logon) andOffSelector:@selector(logoff) andBackgroundImage:[UIImage imageNamed:@"toggleBottom.png"] andStartingValue:YES]]; 

Larga vida y prosperidad,

Eiran

Cuestiones relacionadas