Question

Une petite question sur la classe UISegmentedControl sur l'iPhone.

Espérons que certains ont peut-être remarqué comment, dans son état par défaut avec 2 segments, le contrôle segmenté bascule quand même, même si l'utilisateur appuie sur un segment actuellement sélectionné.

J'ai vu UISegmentedControls dans des applications qui nient ce comportement et ne bascule pas lorsque l'utilisateur appuie sur un segment sélectionné. À savoir l'application iTunes Store d'Apple.

Existe-t-il un moyen simple d'empêcher ce comportement que je passe sous silence ou dois-je écrire une logique dans valueChanged?

J'ai essayé de désactiver les segments actuellement sélectionnés et d'activer ceux qui ne sont pas sélectionnés, mais cela semble modifier l'apparence du contrôle lorsque je ne le souhaite pas.

Des idées?

Était-ce utile?

La solution

Recherchez dans le fichier d'en-tête UISegmentedControl.h (un moyen simple consiste à double-cliquer sur "UISegmentedControl" dans XCode en maintenant la commande enfoncée).

Vous y trouverez plusieurs éléments dans une structure _segmentedControlFlags . Si vous créez une catégorie sur UISegmentedControl, vous pouvez manipuler n’importe lequel de ces éléments, y compris dontAlwaysToggleForTwoSegments qui, comme vous pouvez le deviner par son nom, correspond à ce que vous recherchez.

Comme cela est documenté dans l'en-tête de l'API (bien que ce ne soit pas dans la documentation proprement dite), son utilisation devrait être relativement sûre.

Autres conseils

Ce comportement par défaut a été modifié dans l'API 3.0.

Dans 3.0, " _segmentedControlFlags ". a été remplacé par le paramètre " momentané ". propriété, qui se trouve toujours dans le fichier d’en-tête UISegmentedControl.h .

L'accès à _segmentedControlFlags via une catégorie est considéré comme une utilisation d'une API privée et constitue donc une violation du contrat de licence d'Apple, comme je devais le savoir aujourd'hui. Jusqu'à présent, pensais-je, les catégories sont une fonctionnalité du langage permettant de corriger le design horrible d'une autre personne ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top