Question

J'ai besoin d'aide sur mes apparitions UISegment, j'ai défini ceci dans mon délégué d'application, tout fonctionne correctement.

Jusqu'à ce que j'ajoute ce code pour changer la couleur de mon segment sélectionné, cela posait des problèmes.

J'ai appelé l'IBAction lorsque viewDidLoad.

il est censé le montrer

entrez la description de l'image ici

entrez la description de l'image ici

appdelegate

   //normal segment
    [[UISegmentedControl appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIFont fontWithName:@"Rokkitt" size:20.0],UITextAttributeFont,
      [UIColor colorWithRed:75.0/255.0 green:75.0/255.0 blue:75.0/255.0 alpha:1.0], UITextAttributeTextColor, 
      [UIColor clearColor], UITextAttributeTextShadowColor,
      [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
      nil] forState:UIControlStateNormal];


    //selected segment
    [[UISegmentedControl appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIFont fontWithName:@"Rokkitt" size:20.0],UITextAttributeFont,
      [UIColor whiteColor], UITextAttributeTextColor, 
      [UIColor clearColor], UITextAttributeTextShadowColor,
      [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
      nil] forState:UIControlStateHighlighted];

Appel IBAction

// Get number of segments
    int numSegments = [infoSegment.subviews count];

    // Reset segment's color (non selected color)
    for( int i = 0; i < numSegments; i++ ) {
        // reset color
        [[infoSegment.subviews objectAtIndex:i] setTintColor:[UIColor colorWithRed:196.0/255.0 green:223.0/255.0 blue:155.0/255.0 alpha:1]];
    }

    // Sort segments from left to right
    NSArray *sortedViews = [infoSegment.subviews sortedArrayUsingFunction:compareViewsByOrigin context:NULL];

    // Change color of selected segment
    [[sortedViews objectAtIndex:infoSegment.selectedSegmentIndex] setTintColor:[UIColor colorWithRed:51.0/255.0 green:166.0/255.0 blue:85.0/255.0 alpha:1]];
        // Remove all original segments from the control
    for (id view in infoSegment.subviews) {
        [view removeFromSuperview];
    }

    // Append sorted and colored segments to the control
    for (id view in sortedViews) {
        [infoSegment addSubview:view];
    }
Était-ce utile?

La solution

Il semble que le code ci-dessus ne définit que l'apparence du UIControlStateNormal, vous devez également définir l'apparence du UIControlStateSelected .

Autres conseils

belle façon de teinter les segments individuels, je cherchais quelque chose comme ça. Mais maintenant je me demande si c'est une manière "légale" ...

avec:

[[infoSegment.subviews objectAtIndex:i] setTintColor:[UIColor colorWithRed:196.0/255.0 green:223.0/255.0 blue:155.0/255.0 alpha:1]];

il semble que vous utilisez la propriété "privée" "tintColor" des éléments individuels dans UISegmentedControl, non officiellement déclarée par apple (elle est déclarée uniquement la propriété "tintColor" de l'ensemble de UISegmentedControl, puis apple l'utilise pour coloriser dans2 manière différente les éléments, l'un sélectionné et l'autre).

Donc, votre méthode pourrait vraiment fonctionner, et j'envisage de l'utiliser ... mais Apple pourrait rejeter votre application si elle est vraiment considérée comme une méthode de définition privée ... l'avez-vous déjà utilisé dans une application approuvée pour iStore?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top