web-dev-qa-db-fra.com

Uiswitch - Changer d'ON / OFF à Oui / Non

est-ce que quelqu'un sait d'une manière que je peux changer l'étiquette de texte pour ON et OFF pour OUI et non?.

Je l'ai fait avec

            ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Yes";
        ((UILabel *)[[[[[[switchControl subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"No";

Cependant, avec la libération de iOS 4.2, cela n'est plus pris en charge (cela n'a probablement pas été recommandé par Apple quand même)

Mon client insiste sur les commutateurs oui/non. J'apprécierais tout conseil!

merci beaucoup

18
krisdyson

Vous devez implémenter votre uiswitch personnalisé pour cela. Ou utilisez-en un déjà implémenté :) (chèque ceci SO Question et ce post )

20
Vladimir

Hourra! De iOS 6, il est possible de spécifier une image à utiliser pour les états marche/arrêt, respectivement. Donc, cela peut être utilisé pour afficher une image Oui/Non (ou quelle que soit l'image représentant le texte que vous préféreriez utiliser au lieu de/éteinte précédemment limitée).

 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
 {
     [mySwitch setOnImage: [UIImage imageNamed:@"UISwitch-Yes"]];
     [mySwitch setOffImage:[UIImage imageNamed:@"UISwitch-No"]];
 }

Les images doivent être de 77 px larges, 27 px hautes et le texte (une image pour chaque état) doivent être centrés horizontalement dans cette largeur de 77 px. J'utilise des arrière-plans transparents pour le texte afin que je puisse toujours utiliser la teinte pour l'arrière-plan, qui fonctionne toujours avec cela.

Bien sûr, il semblerait plus facile de simplement fournir du texte, plutôt que de devoir utiliser une image de texte, mais je suis certainement reconnaissant pour cette nouvelle option, au moins.

24
Snips

Vladimir Réponse est géniale, mais à mon humble avis, il y a une implémentation encore meilleure ici: https://github.com/Domesticcatsoftware/dcroundwitch .

Outre la définition d'un texte personnalisé, il est plus facile de modifier la taille et la couleur de l'UISWITCH et vous obtenez un résultat plus net.

Il est libéré sous un MIT. Jetez un coup d'œil!

12
Xavi Gil

Il s'avère que vous pouvez créer une uiswitch personnalisée avec les éléments suivants:

  • Un Uiscrollview
  • Un uibutton
  • Deux uilabels
  • Une image d'arrière-plan
  • Une valeur booléenne

Vous devrez d'abord ajouter QuartzCore.framework à votre projet et #import <QuartzCore/QuartzCore.h> à votre contrôleur d'affichage.

Suivant Ajoutez l'Uiscrollview à votre vue à l'aide de l'interface Builder. Le ScrollView sera votre Uiswitch personnalisé. Suivant Ajoutez le bouton et les deux étiquettes à votre ScrollView. Une étiquette sera pour "oui" l'autre pour "non".

Ajoutez l'image au bouton et définissez son type sur Personnalisé. C'est l'image que j'utilise: enter image description here

Placez les étiquettes sur la zone bleue et blanche de l'image. Ajustez la vision de Scroll View afin qu'il soit juste assez grand pour montrer la partie bleue de l'image et le nob thumb.

Ajoutez la ligne suivante à ViewDidLoad:

self.mySwitch.layer.cornerRadius = 13.5;

mySwitch est le nom de The ScrollView et 13.5 est la moitié de la hauteur de la vision de ScrollView. La déclaration ci-dessus modifie la vision de Scrollie pour avoir des extrémités arrondies telles que l'UISWITCH.

Pour faire activer le commutateur personnalisé, vous devrez attacher les boutons "Touchez à l'intérieur" Event à une ibaction. Voici le code que j'utilise dans le gestionnaire d'événements:

-(IBAction)mySwitchButton:(id)sender {
    self.myValue = !self.myValue;
    CGPoint scrollPoint = CGPointMake((self.myValue)? 43.0: 0, 0.0);
    [mySwitch setContentOffset:scrollPoint animated:YES];
}

Lorsque MyValue est la variable booléenne qui contient l'état de votre commutateur et 43.0 est le nombre de points que vous devrez déplacer l'image sur pour mettre le commutateur en position OFF.

C'est tout ce qu'il y a!

8
JSWilson

De iOS 6, il est possible de spécifier une image à utiliser pour les états ON/OFF Uiswitch, mais pas le texte. Cela mènera des problèmes lorsque l'internationalisation est requise, car les traducteurs doivent fournir un texte d'image pour chaque langue, et non seulement du texte. De plus, la taille de l'image Uiswitch est corrigée, limitant la longueur du texte.

En raison des raisons ci-dessus, j'aime la réponse de Jswilson: simple et flexible.

Pour soulager les développeurs de la nécessité d'ajouter manuellement les contrôles requis, j'ai codé une classe de Crdscrollswitch personnalisée que vous pouvez trouver sur mon référentiel GitHub: https://github.com/corerd/crdscrollswitch

0
corerd