Personnalisation de UISegmentedControl dans iOS 5

Voici mon problème. Je suis la personnalisation d'un UISegmentedControl par définir l'arrière-plan et diviseur images de la manière suivante:

[[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:segUnselectedSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

Lorsque je tente de faire le 1er segmenté sélectionné à l'intérieur de viewDidLoad

self.segmentedControl.selectedIndex = 1;

J'ai le chose bizarre:

Personnalisation de UISegmentedControl dans iOS 5

au lieu de:

Personnalisation de UISegmentedControl dans iOS 5

Personne ne sait si c'est un bug et comment pourrais-je fournir un rapport de bug? Si non, quel est le problème avec mon code?

  • Dois-je rassembler correctement que votre commande a l'air bien manuellement lorsque vous appuyez sur l'un des segments d'après votre point de vue a chargé? Ou est-il toujours le même aspect que dans la première image?
  • Vous êtes de droite. Il ressemble à ceci la première fois que la classe est chargée et que la valeur est réglée manuellement. Puis plus tard dans l'application si l'utilisateur appuie sur l'un des segments, puis il a l'air bien. Aussi, si il y a deux sectorielle des contrôles et de l'utilisateur modifie la valeur de la première et j'ai modifier par programmation la valeur de la seconde en raison de la logique, alors il a l'air bien aussi. Je suis à l'aide de l'iOS 4.2 SDK sur Snow Leopard.
  • Il semble que le contrôle est l'utilisation de la mauvaise diviseur image au démarrage (c'est à l'aide de l'un pour les non sélectionnés/désélectionner au lieu de la désactivée/activée). À quel moment exactement dans votre cycle de vie d'application sont vous du réglage de l'aspect de la UISegmentedControl?
  • Je suis en train de l'apparence dans la méthode viewDidLoad
  • J'ai utilisé moi-même avant sans problèmes. La segmentation du contrôle de la valeur a été chargé par programme au début de NSUserDefaults, mais je n'ai pas rencontré avant. Alors qu'il est possible qu'il y ait un bug dans le SDK, je pense qu'il y aurait beaucoup plus de gens avec ce problème dans ce cas. Cela peut aider si vous pouvez poster plus de code.
  • Non testé: vous pouvez essayer de ne pas en avoir sélectionné pendant le chargement et ensuite, sur viewWillAppear, la "sélection" celui que vous voulez.
  • J'ai essayé ça aussi, et ça ne fonctionne pas!
  • Je suis d'accord que ce doit être un bug. J'ai mis l'apparition dans didFinishLaunchingWithOptions et utilisé extensible images, mais je rencontre le même problème. J'ai essayé toutes les solutions ci-dessous, mais sans succès.
  • Il semble exister une semblable (mais une autre) bug dans iOS 6. Lorsque la vue est chargée pour la première fois (si l'utilisation de deux segments) le point de vue trompé de diviseur de l'image jusqu'à ce que par programmation, vous passez à un autre segment et de retour à nouveau. Cela ne fonctionne pas si vous le faites dans viewWillAppear, mais il fonctionne si vous le faites dans viewDidAppear!
  • Outre le commentaire ci-dessus ce problème apparaît lorsque le contrôle de l'état est défini sur désactivé.
  • Je l'ai fait et il a bien fonctionné. Êtes-vous à l'aide de redimensionner les images? Je l'ai utilisé seul pixel de large, de redimensionner les images et cela a fonctionné sans aucun problème.

InformationsquelleAutor nimeshdesai | 2012-02-02