2009-12-02 5 views

Répondre

4

Non, aucune API ne vous permet de contrôler la disposition des segments.

Vous pourriez probablement essayer d'examiner les view.sub de UISegmentedControl et essayer de les changer en fonction de vos besoins. Mais par expérience personnelle, je ne conseillerais pas cela. Si Apple a changé sa commande à l'avenir, votre application va probablement tomber en panne. La chose la plus simple à faire est de créer des UIButtons personnalisés qui se comportent comme des boutons bascules et de les contrôler comme un UISegmentedControls (pour les boutons bascules, voir How to use a UIButton as a toggle switch).

1

Si vous voulez un look différent, vous pouvez juste le sous-classer et faire votre propre dessin en -drawRect:. Voir le Quartz 2D Programming Guide pour référence sur le dessin avec Quartz/Core Graphics.

20

Il y a quelque chose vraiment facile que vous pouvez faire pour vous débarrasser de la jonque arrondie sur le UISegmentedControl ... changer le style de « 7 ». Je ne plaisante pas. Je viens de comprendre ceci:

// Magic number ... (it's cheating, but it works) 
    mySegmentedBar.segmentedControlStyle = 7; 

C'est le même style de contrôle qu'ils utilisent dans la barre de portée du UISearchBar, comme ceci:

Search Bar With Scope

Mais si quelqu'un veut que la barre de portée, sans recherche, ils sont généralement coincé avec l'ordure UISegmentedControl comme celui-ci (avec des coins arrondis):

BarStyle

Ou pire, ce ...

BezeledStyle

Heureusement, en passant à la barre de style « 7 », nous obtenons l'apparence exacte de la barre d'arrêt, sans que tous les sous-classement et drawRect carriole:

enter image description here

+1

C'est comme de la magie. – Joel

+4

Est-ce considéré comme une API privée? – jjxtra

+0

@GregCombs cela fait un moment, voudrais une réponse à ce sujet^s'il vous plaît, chaque fois que vous avez le temps – GangstaGraham

0

Après beaucoup d'essais, j'ai obtenu en dessous de solution qui fonctionne très bien sans image de fond ou sous-classement:

mySegmentedControl.tintColor = [UIColor clearColor]; //Clear all border 

    //Draw your own border 
    mySegmentedControl.layer.borderColor = [UIColor blackColor].CGColor; 
    mySegmentedControl.layer.borderWidth = 1.0; 

    //Set tint color for selected subview 
    UIColor *tintcolor=[UIColor redColor]; 
    int subViewIndex = 0; //index which is selected 
    [[_segmentControl.subviews objectAtIndex:subViewIndex] setTintColor:tintcolor]; 
1

En ajoutant une bordure avec une largeur raisonnable, vous pouvez obtenir le look carré:

self.segmentedControl.tintColor = [UIColor brownColor]; 
self.segmentedControl.layer.cornerRadius = 0.0; 
self.segmentedControl.layer.borderColor = [UIColor brownColor].CGColor; 
self.segmentedControl.layer.backgroundColor = [UIColor colorWithWhite:1 alpha:0.75].CGColor; 
self.segmentedControl.layer.borderWidth = 1.5f; 
self.segmentedControl.layer.masksToBounds = YES;