2009-08-21 6 views
13

Je voudrais créer un bouton bascule dans mon application iPhone. Cependant, je ne sais pas exactement quelle serait la meilleure approche pour cela.Mise en œuvre du bouton bascule iPhone

Je considère deux options.

Je pourrais sous-classer un UIButton. De cette façon, je n'ai pas à mettre en œuvre la manipulation tactile. Je pourrais juste créer une méthode qui retourne un booléen indiquant si le bouton est dans l'état allumé ou éteint.

Je pourrais aussi commencer avec une sous-classe UIView et la créer à partir de zéro. Je suppose qu'il serait plus facile de faire des choses comme une animation de transition, mais je devrais créer ma propre manipulation tactile.

Selon vous, quel est le meilleur? Ou sauriez-vous un meilleur moyen? (Peut-être existe-t-il une vue open-source/libre disponible sur le web?)

EDIT: Je ne veux pas utiliser l'UISwitch parce que je veux que mon bouton bascule ressemble à ça. Je veux que ce soit un gros bouton rectangulaire et que l'arrière-plan change pour indiquer l'état.

Merci!

Répondre

4

Vous pouvez utiliser UIButton et définir sa propriété enabled.

Dans Interface Builder, vous pouvez définir des images distinctes pour les états activé et désactivé, et IBAction modifier la propriété.

+0

C'est intelligent. Je vous remercie! –

+12

Je me demandais pourquoi vous avez choisi la propriété 'enabled' au lieu de' selected'? Après avoir lu cette astuce, je l'ai implémenté aujourd'hui en utilisant 'selected'. Fonctionne très bien. Ensuite, j'ai relu l'astuce et essayé 'enabled'. Une fois désactivé, vous ne pouvez plus cliquer sur le bouton, ce n'est donc pas une bonne bascule. Y a-t-il un réglage que j'ai manqué? – slothbear

+0

Vous avez raison, j'ai suggéré cela dans un commentaire sur une réponse différente. –

0

N'y a-t-il pas déjà un bouton bascule, ou ai-je oublié quelque chose ici?

EDIT: Comme d'autres l'ont dit, il s'appelle UISwitch, et il active et désactive.

+0

'UISwitch' est un moyen de mettre en œuvre –

+0

Merci de basculer. Je ne me souviens pas du nom exact et je n'ai pas installé le SDK iPhone sur ce système. – Cinder6

0

Peut être que je ne comprends pas bien la question N'êtes-vous pas en utilisant ..why UISwitch

0

J'ai aussi regardé UISwitch, mais dans mon cas, je ne veux pas de bouton on/off, je veux vraiment un bouton bascule. Ce que j'essaie de faire, encore une fois dans mon cas, est d'avoir un bloc de boutons qui ressemble à un UISegmentedControl, mais où l'utilisateur peut "basculer" plus d'un des boutons sur le contrôle à la fois. Le problème que j'essaie de résoudre est que j'ai un écran TRÈS limité et qu'il y a beaucoup de basculements à faire apparaître à l'écran.

Mon repli sera probablement un UITableView plein de cellules à bascule. De cette façon, je peux ajouter autant de bascules que je veux dans une zone fixe et défilable de l'écran. Malheureusement, UISwitch ne correspond pas toujours aux spécifications de l'interface utilisateur, donc je suppose que l'homme qui a posté le post original ne cherchait pas non plus un bouton On/Off, mais voulait un bouton qui a changé son état en quelque sorte.

0

Je dois le faire aussi. Le fait de ne pas activer l'état activé empêcherait-il le basculement du bouton?

MISE À JOUR

Les gens suggèrent UISwitch mais peut-il être écorché avec tous les jusqu'à pertinents, plus, personnes handicapées, selectedUp, SelectedOver, États selectedDisabled?

+0

Oui, ce que j'ai fini par faire, c'est d'utiliser la propriété 'selected', qui - pour autant que je sache - ne fait vraiment rien pour UIButton. –

+0

Est-ce que UIButton prend en charge tous les états du bouton bascule pour l'habillage. Pardonnez mon ignorance que je regarde cela en tant que développeur Flex. Dans Flex un ToggleButton a les états up, over, disabled habituels, mais a aussi selectedUp, selectedOver, selectedDisabled etc. Vous auriez besoin de tous ces états pour créer une bascule appropriée. Et oui, vous avez également besoin d'une propriété sélectionnée. Si cela existe sur le UIButton, il vous suggère d'activer le basculement. Est-ce vrai? –

+0

Non, je ne le crois pas. Mais ce que vous pouvez faire est d'écraser la méthode setSelected: et changer le style ici. –

2

Il suffit de faire une méthode (IBAction) et aussi un BOOL. Définissez BOOL par défaut sur FALSE. Votre IBAction doit ressembler à ceci:

- (IBAction) .... { 

    if (bool) { 
     // do your things 
    } 

    else { 
     // do your things 
    } 

    bool =! bool 
} 

qui fonctionne pour moi!

+1

Ce serait -work-, mais ce n'est pas très -précis-. –

13
-(IBAction)toggle{ 
    if (button.selected == NO) { 
     button.selected = YES; 

    } 
    else { 
     button.selected = NO; 
    } 
} 

ou

-(IBAction)toggle:(UIButton*)sender 
{ 
sender.selected = !sender.selected; 
} 

mec simple,

+8

que se passe-t-il si 'button.selected =! Button.selected;' mec le plus simple! : D –

+0

hmm thats bon :) – Mashhadi

+1

Encore mieux: '- (IBAction) bascule: (UIButton *) expéditeur { sender.selected =! Sender.selected; } ' – AlexChaffee