2011-12-19 3 views
2

Selon le UITextInputTraits Protocol Reference, le UIKeyboardTypeDecimalPad est "Disponible dans iOS 4.1 et versions ultérieures".Comment tester si UIKeyboardTypeDecimalPad est disponible?

J'utilise actuellement le système Versioning préprocesseur macros trouvées dans How to check iOS version? pour vérifier si mon application est en cours d'exécution dans iOS 4.1 et plus tard, mais je me demande ...

Y at-il une meilleure façon de tester la disponibilité de ce clavier ? Je ne peux pas tester la disponibilité du sélecteur "setKeyboardType", car cela retournera toujours YES. J'ai besoin de tester si l'un des enums UIKeyboardType est disponible pour utilisation.

Des idées?

+0

Duplication de [cette] question (http://stackoverflow.com/questions/6468986/ios-objective-c-how-to-check-if-an-enum-is-available). – Hyperbole

+0

@Hyperbole, votre nouveau commentaire bat en vérifiant l'adresse d'une énumération. – tychoD

Répondre

4

Essayez ceci:

yourTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuation; 
    if (([[[UIDevice currentDevice] systemVersion] doubleValue] >= 4.1)) { 
     yourTextField.keyboardType = UIKeyboardTypeDecimalPad; 
    } 

Ce vérifie la version iOS exécutée sur le périphérique pour voir si elle est assez « nouveau ». C'est-à-dire, le clavier avec un bouton décimal était disponible dans iOS4.1. Donc, toute version iOS à ou après cette version l'a.

La technique est (vaguement) "test de capacité basé sur la version". Il existe d'autres techniques similaires de test de capacité, telles que vérifier si une classe répond à un sélecteur particulier, qui fonctionne bien dans d'autres situations.

Généralement, il est préférable de vérifier la disponibilité d'un sélecteur spécifique que de vérifier les numéros de version. Mais dans le cas de quelque chose comme une constante, vérifier la version de l'OS sous-jacent (à mon avis) est tout aussi bonne.

+0

Mark, votre réponse confirme ce que je faisais. Merci de prendre le temps de répondre! – tychoD

Questions connexes