UISegmentedControl événement de changement de pas de tir dans iOS5
J'ai un UISegmentedControl dont la Valeur a changé" événement est câblée à l'Interface Builder pour appeler mon contrôleur -(IBAction)segmentChangeAction:(id)sender;
Lorsque l'utilisateur appuie sur la commande pour modifier le segment sélectionné, comme prévu segmentChangeAction
est appelé que dans iOS4 ou iOS5.
Quand je l'ai changer par programmation le segment sélectionné par segmentedControl.selectedSegmentIndex = newIndex;
, sur iOS4 segmentChangeAction
est appelée et le secteur reflète la nouvelle sélection. Cependant sur iOS5 segmentChangeAction
est pas appelé, mais le segment de ne tenir compte de la nouvelle sélection.
Est-ce un changement dans iOS5? Est-ce que je peux faire pour obtenir segmentChangeAction
appelé sur iOS5 quand je l'ai changer par programmation de la sélection?
Vous devez vous connecter pour publier un commentaire.
C'est un changement dans iOS 5 pour
UISegmentedControl
pour être compatible avec tous les autres contrôles.L'idée est que l'action ne devrait déclenché automatiquement lors de l'interaction de l'utilisateur. Avant iOS 5,
UISegmentedControl
actions serait congédié en raison de l'interaction de l'utilisateur et programmatique de l'interaction. Cependant, d'initier le changement par programme signifie que vous pouvez également faire[myControl sendActionsForControlEvents:UIControlEventValueChanged]
vous-même.Cependant, vous devez être prudent avec cette. Dire que vous faites:
Si vous générez et exécutez cette sur iOS 5, il fonctionne comme prévu. Si vous générez et exécutez cette sur iOS 4, vous aurez vos actions tiré deux fois (une fois lorsque vous
setSelectedSegmentIndex
et à nouveau lorsque voussendActions...
).Le moyen de contourner cela est de faire une sorte de garde. Cela pourrait être un moment de l'exécution pour indiquer que vous êtes en cours d'exécution sur un iOS 5+ appareil, ou peut-être même quelque chose de plus terre à terre, comme ceci:
et puis dans votre méthode d'action...
segmentChangeAction
directement après la modification de l'indice), après avoir vérifié qu'il n'y a pas de problème avec ce code appelé deux fois sur iOS<5. Mais je me sens beaucoup plus heureuse de savoir pourquoi j'ai eu pour ce faire, je vous remercie.UIControl
qui n' pas suivez ce problème, veuillez soumettre un rapport de bogue, et il sera corrigé. 🙂UIControlEventValueChanged
événement utilisé pour être généré à partir de l'interaction de l'utilisateur et des programmes de l'interaction. Maintenant, c'est uniquement généré à partir de l'interaction de l'utilisateur (ce qui est cohérent avec toutes les autres commandes intégrées).J'ai trouvé une autre façon, probablement peu plus facile à comprendre
vous pouvez étendre UISegmentedControl et ajouter une cible d'action dans l'init de méthodes et d'appeler un délégué méthode pour déclencher le changement de valeur
voici l'exemple de code
fichier d'en-tête ressemble à ceci
.m fichier
Et vous pouvez définir le délégué de l'appel de la classe