2009-07-10 4 views
7

J'ai un UIPickerView avec plusieurs composants. Certaines valeurs sont grisées, et mon pickerView:didSelectRow:inComponent honore cela en déplaçant le composant sélecteur en question à la valeur valide la plus proche, tout comme UIDatePicker passe de "30" à "28" lorsque vous sélectionnez "Février". Ensuite, il appelle une méthode déléguée pour annoncer la valeur ajustée.UIPickerView selectedRowInComponent: renvoie les données périmées après que le code l'a ajusté

Lorsque mon procédé de réglage appelle mes UIPickerView « s selectRow:inComponent:animated:YES, la valeur sur l'écran est correct, mais les valeurs de selectedRowInComponent: sont périmées (d'avant l'ajustement des valeurs de gris). Cependant, si j'appelle selectRow:inComponent:animated:NO, les valeurs retournées sont correctes, mais le manque d'animation est discordant.

J'ai essayé envelopper l'ajustement dans un beginAnimations:/commitAnimations bloc et attraper les valeurs de +animationDidStopSelectorUIView, mais je reçois encore des valeurs périmées. Quelqu'un at-il déjà rencontré cela?

Le problème est facile à dupliquer.

[picker selectRow:newValue inComponent:i+offset animated:YES]; 

retValue = [picker selectedRowInComponent:i+offset]; 

Si vous avez OUI pour l'animer, alors retValue est 0 à l'esprit (vous l'appelez obsolète). En passant à NO, retValue sera le même que newValue.

Répondre

1

Je n'ai pas remarqué cela, mais un hack facile pourrait être d'effectuer l'opération animée, puis une fois l'animation terminée, il suffit de le faire à nouveau sans l'animation. Alors les résultats de selectedRowInComponent devraient être corrects. Toutefois, il semble que votre code de test renvoie les résultats corrects. Si vous demandez au sélecteur de sélectionner la ligne animée, la nouvelle valeur n'est pas définie tant que l'animation n'est pas terminée, donc si vous demandez immédiatement la ligne sélectionnée après le démarrage de l'animation (qui ne démarrera pas avant le prochain cycle)), alors vous allez obtenir le vieux résultat.

Comment exactement attrapez-vous la fin de l'animation de toute façon, pourriez-vous montrer le code que vous avez utilisé?

Et une autre question est, pourquoi avez-vous besoin que ce soit immédiatement correct? Si vous définissez le sélecteur explicitement, alors vous savez déjà exactement quelle valeur est définie, alors pourquoi devez-vous le demander à nouveau?

Questions connexes