2010-12-01 15 views
1

J'ai créé un UIButton en transmettant une valeur entière comme ceci.Problème UIButtonType

UIButton* custom_newBackButton = [UIButton buttonWithType:101]; 
[custom_newBackButton addTarget:self action:@selector(backButtonAction) forControlEvents:UIControlEventTouchUpInside]; 
[custom_newBackButton setTitle:@"Back" forState:UIControlStateNormal]; 

UIBarButtonItem* newBackButton = [[UIBarButtonItem alloc] initWithCustomView:custom_newBackButton]; 
[[self navigationItem] setLeftBarButtonItem: newBackButton]; 

Dans certaines classes, cela fonctionne, mais quelques-unes des classes, il échoue avec « conversion non valide de int à UIButtonType ». Est-ce une façon recommandée de gérer cela. J'ai simplement utilisé cette 101 pour avoir l'apparence et le toucher du bouton arrière.

Cordialement,

Dilshan

+0

Merci beaucoup! Je ne savais pas, qu'il y a plus de types de boutons disponibles que la documentation nous le dit. Je viens de le tester et j'ai trouvé qu'il y a les types de boutons supplémentaires 100, 101, 102, 110, 111, 112, 113, 114 et 115. Mais revenons à la question: ne compile-t-il pas, si vous utilisez un cast à UIButtonType, aussi? Ou est-ce une erreur d'exécution que vous obtenez? –

+0

La chose étrange est-ce que c'est dans quelques endroits. mais dans un endroit, il résulte en avertissement de compilation ci-dessus. Pas certain de pourquoi. – Dilshan

+0

Est-ce qu'il échoue (= erreur) ou obtenez-vous juste un avertissement? Je me demande s'il peut y avoir un grand projet sans avertissement du compilateur. –

Répondre

5

Les types de boutons suivants sont officiellement documentés dans le matériel de documentation Apple:

 
typedef enum { 
    UIButtonTypeCustom = 0, 
    UIButtonTypeRoundedRect, 
    UIButtonTypeDetailDisclosure, 
    UIButtonTypeInfoLight, 
    UIButtonTypeInfoDark, 
    UIButtonTypeContactAdd, 
} UIButtonType; 

Enjoy! Veuillez éviter d'utiliser des valeurs directes. Les valeurs des constantes peuvent changer et casser votre application.

+2

+1 pour les deux indiquant l'énumération documentée et en conseillant d'utiliser des noms de constante au lieu de leurs valeurs littérales. – BoltClock

+0

Oui, je préfère aussi utiliser constant au lieu de littéraux. Mais le problème ici est qu'il n'y a pas de valeurs constantes disponibles pour les boutons de type bouton de retour. Alors que dois-je faire à ce sujet? – Dilshan

+0

+1 pour "Les valeurs des constantes peuvent changer" – lkraider

1

il coulée Explicitement à UIButtonType devrait fonctionner correctement, mais est sans papier et serait rejeté la constante lors de la soumission à l'App Store si l'examinateur serait au courant.

+0

Les constantes sont bien documentées. – BastiBen

+0

@badcat Je veux dire '101', pas des valeurs enum. – tia

+0

Oh, désolé pour ça. Bien que la plupart des développeurs considèrent la distribution explicite de valeurs statiques comme une très mauvaise habitude ...;) – BastiBen