À l'aide de UISegmentedControl comme bouton
Dans mon code j'utilise un UISegmentedControl
comme un "bouton" avec UN seul segment et le momentary
propriété définie à YES
. Dans les versions du kit de développement SDK avant iOS 4, ce n'était pas un problème, mais il semble que maintenant l'iOS 4, il faut au moins 2 segments. Le code suivant génère une exception:
NSArray *titles = [NSArray arrayWithObject:@"Button Title"];
myButton = [[UISegmentedControl alloc] initWithItems:titles];
et maintenant dans Interface Builder, vous ne pouvez même créer un UISegmentedControl avec moins de 2 segments. Il enregistre l'erreur suivante lors de la construction:
"Le nombre de segments de la propriété d'une segmentation de contrôle doit être supérieur ou égal à 2."
Je suis un peu perplexe. Toutes les solutions pour cela? J'ai essayé de créer un UISegmentedControl
avec deux boutons, puis supprimer un par programme et qui "fonctionne" comme il n'entraîne pas l'application crash. Je reçois un bouton dans iOS 3 et rien dans l'iOS 4. Des idées?
J'ai utilisé pour faire la même chose pour les boutons colorés de la iOS3, mais ils semblent avoir retiré cette fonctionnalité dans la version iOS4.
Il semble que vous avez oublié de néant, comme un second élément de titres de tableau. Voir ma réponse ci-dessous de code de travail.
arrayWithObject: ne prend qu'un seul argument. Vous êtes en train de penser arrayWithObjects:
Désolé, vous avez raison. Mais la ligne de fond est que arrayWithObjects à néant en tant que second paramètre fera l'affaire.
OriginalL'auteur Adolfo | 2010-07-16
Vous devez vous connecter pour publier un commentaire.
Vraiment étrange. Il fonctionne toujours très bien pour moi en iOS4 simulateur et périphérique (c'est un véritable travail d'extrait de mon code):
OriginalL'auteur spbfox
Avez-vous essayé ceci:
Oui, j'avais essayé et il a travaillé pour l'appareil, mais pas le simulateur. Dans le simulateur, j'ai eu un bouton vide (comme dans pas visible à tous), mais il a montré fine sur l'appareil et, en fait, est dans une expédition app.
Cela a fonctionné pour moi. Merci!!
OriginalL'auteur elslooo
Ce n'est pas exactement un code solution mais: j'ai frappé un problème similaire, et qui finit de dessiner mes propres semblable à la recherche de ressources dans Photoshop. Il n'était pas très difficile à faire et enlevé une particulière mauvaise "odeur de code", de l'OMI.
OriginalL'auteur Colin Barrett
J'ai trouvé, si vous avez un projet avec un seul segment UISegmentedControl, vous pouvez l'ouvrir tant que projet et de votre nouvelle Interface Builder et faites-la glisser (ou de le copier/coller) le seul segment UISegmentedControl à votre nouveau-vue-contrôleur. Il fonctionne parfaitement dans votre application et Interface Builder, il suffit de ne pas changer le nombre de segments de 1 à rien d'autre que de ne pas vous laisser aller en arrière. Je suis en utilisant Xcode 4.6.2 et iOS 6.
OriginalL'auteur mrzzmr
L'éditeur dans Interface Builder ne vous laisseront pas de changer le nombre de segments à moins de 1, mais vous pouvez faire une commande segmentée de l'IB en modifiant le .xib xml manuellement.
Open As
->Source Code
dans le menu contextuel.Trouver "
<segments>
qui est le début de l'xml tableau de segments. Le tout devrait ressembler à:Il suffit de supprimer
<segment title="Segment 2 Title"/>
et il n'est qu'un segment de l'élément.Open As -> Interface Builder - iOS
pour revenir à l'interface builder.Vous devriez certainement régler la commande segmentée "momentané" de mode.
Je ne reçois pas toutes les erreurs de compilation ou d'exécution. Bien sûr, c'est un hack, et peut casser des choses dans certaines circonstances ou dans une future version d'iOS.
OriginalL'auteur Kenny Winker
Bien deux possibilités:
1) Créer un bouton et l'ensemble image d'arrière-plan comme le seul point de la UISegmentedControl
Si votre SegmentedControl est une variable de classe il suffit de remplacer le @property
Dans le viewDidLoad-fonction ajouter le suivant
2) Définir le nombre de segments à trois de vos UISegmentedControl et ensuite définir la largeur à 20 - maintenant seulement la dot dans le milieu sera montré.
N'oubliez pas, si l'utilisateur interagit avec le UISegmentedControl, définir la currentElement à nouveau pour le deuxième segment, le reste de la dot sera en gris au lieu de blanc d'état.
3) Placez un bouton ou une petite vue sur la indésirable deuxième point de la UISegmentedControl dans InterfaceBuilder. Assurez-vous que le backgroundcolor est même.
Lorsque vous utilisez un bouton définir l'état de "l'interaction de l'utilisateur" dans l'attribut inspecteur désactivé. Comme type, j'aurais choisi "personnalisé" puisque vous n'avez pas certaines frontières dans le bouton 😉
Maintenant un homme nouveau sûr, c'est toujours le premier point est l'Élément actif.
Cependant, je pense que la solution doit être la façon dont vous devriez aller, puisqu'Apple a pensé quelque chose, quand ils ont désactivé le 1-point-SegmentedControl. Puisque vous utilisez le Contrôle comme un bouton de l'Élément que vous êtes à la recherche fpr doit être un bouton. 😉
OriginalL'auteur user413280
Il n'y a pas de solution dans l'iOS 4. Si vous avez besoin de cette fonctionnalité, remplir un rapport de bogue (demande d'amélioration) à bugreport.apple.com.
OriginalL'auteur Nikolai Ruhe
Vous pouvez également utiliser
removeSegmentAtIndex:animated:
. Si vous créez une commande segmentée dans un storyboard ou xib avec deux segments, vous pouvez supprimer l'un comme ceci:OriginalL'auteur Peter DeWeese