Il n'est pas difficile à faire votre propre UIPicker qui ressemble à un UIDatePicker, mais vous devez être prudent, car le bug est en NSCalendar
ainsi que NSDatePicker
.
Juste pour être clair, l'extra " 2 " n'est pas sélectionnable, tout comme 30 n'est pas sélectionnable dans un petit mois. NSDatePicker ne cache pas non valide en jours ou en mois, mais en fait ne peut pas être sélectionnée. Ainsi, dans le calendrier Grégorien, si vous sélectionnez février, vous pourrez toujours voir les 29, 30 et 31, mais en essayant de sélectionner le sélecteur de a à 28. Le DataPicker chiffres sur combien de mois et de jours à afficher en appelant maximumRangeOfUnit:
sur le calendrier. Dans un calendrier Islamique correcte maximum est de {1, 30}, mais NSCalendar
retourne {1,31} pour maximumRangeOfUnit:NSCalendarUnitDay
pour tous les calendriers Islamiques.
Il y a donc deux bugs. L'une est que NSCalendar est dire qu'il y a peut être de 31 jours dans un Mois Islamique (dont je ne crois pas qui est vrai), et le deuxième problème est que NSDatePicker
est de montrer la 31e jour 2 au lieu de 31.
Faire votre propre NSDatePicker
n'est vraiment pas dur. Le montant de l'élément dans chaque composante est toujours le même (assurez-vous de définir manuellement de 30 jours et de ne pas utiliser la valeur de NSCalendar). La partie difficile est de décider si une date n'est pas valide et en montrant l'élément de gris et de ne pas laisser le piquet se reposer sur lui. Vous pouvez utiliser rangeOfUnit:InUnit:forDate
pour obtenir le nombre de jours dans un mois ou le nombre de mois dans une année. Si un élément non valide sélectionnés passer la valeur de la plus haute date valide (c'est à dire si un utilisateur sélectionne 30 dans un mois et 29 jours sélectionnez 29).
Une fois qu'une ligne est sélectionnée, vous pouvez convertir jour-mois-année, à un NSDate avec dateFromComponents
sur NSCalendar.