1

Je souhaite pouvoir modifier les couleurs et la taille de police des segments d'un UISegmentedControl. Je suis en train de définir le tag pour chaque segment, puis de définir le paramètre tintColor: forTag: pour chacun des segments.UISegmentedControl - Modification des couleurs et de la taille - Ne fonctionne pas correctement

Changement des couleurs fonctionne très bien, jusqu'à ce que je pan de la commande ou pincer. Dans le code UIPinchGestureRecognizer, j'ai défini titleTextAttributes pour avoir une taille de police différente. Lorsque je fais cela, les couleurs des segments reviennent à la couleur par défaut de Gary.

- (void)createElement { 
if (multiStateControl == nil) { 

     //Make our new switch 
     //multiStateControl = [UIButton buttonWithType:UIButtonTypeCustom]; 

    multiStateControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Off State Button", @"On State Button", nil]]; 

    multiStateControl.segmentedControlStyle = UISegmentedControlStyleBar; 

    [multiStateControl setTitleTextAttributes: 
    [NSDictionary dictionaryWithObjectsAndKeys: 
     [UIFont boldSystemFontOfSize:12.0f], UITextAttributeFont, 

     nil] 
            forState:UIControlStateNormal]; 

    [multiStateControl setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 30.0f)]; 

     // Set up the Contents Frame to the same origin as what we were but set the height/width to the new control. 
    [elementViewContents setFrame:CGRectMake(elementViewContents.frame.origin.x, 
              elementViewContents.frame.origin.y, 
              CGRectGetWidth(multiStateControl.frame), 
              CGRectGetHeight(multiStateControl.frame))]; 


     //Set initial use to disabled 
    [multiStateControl setOpaque:NO]; 
     // Set the default title for the button 
      [multiStateControl setTag:kTagOffState forSegmentAtIndex:0]; 
      [multiStateControl setTag:kTagOnState forSegmentAtIndex:1]; 
      [multiStateControl setTintColor:onColor forTag:kTagOnState]; 
     [multiStateControl setTintColor:offColor forTag:kTagOffState]; 

     // Lets get it on the screen 
    [elementViewContents addSubview:multiStateControl]; 
    [multiStateControl release]; 

    [self contentSizeChanged]; 
}  
} 

// Pincez Gesture

-(void) pinchElement:(UIPinchGestureRecognizer *)gestureRecognizer { 

    UIFont *existingFont = [[multiStateControl titleTextAttributesForState:UIControlStateNormal] objectForKey:UITextAttributeFont]; 

    CGFloat existingFontSize = [existingFont pointSize]; 
    CGFloat newFontSize = existingFontSize * [gestureRecognizer scale] ; 

    [multiStateControl setTitleTextAttributes: 
      [NSDictionary dictionaryWithObjectsAndKeys: 
      [UIFont boldSystemFontOfSize:newFontSize], 
      UITextAttributeFont, nil] 
            forState:UIControlStateNormal]; 

    [multiStateControl setFrame:CGRectMake(multiStateControl.frame.origin.x, multiStateControl.frame.origin.y, multiStateControl.frame.size.width+20,newFontSize *1.8)]; 
} 

Répondre

0

Cela semble se produire lorsque je ne définis pas la TintColor, puis augmente la taille de la police de textAttributes. C'est comme si la couleur par défaut utilisait une image standard pour les embouts. Lorsque j'augmente la police, le contrôle augmente, puis les extrémités semblent étirées. Un collègue a mentionné les embouts comme sur un bouton. Il semble que les applications finales soient étirées pour s'adapter à la nouvelle taille de contrôle. Mon travail consistait à définir le TintColor à une couleur proche de la couleur par défaut, ce qui a créé une nouvelle image à la volée (je suppose) et toute la mise à l'échelle des polices fonctionne très bien.

0

Ensuite, vous devez conserver les attributs de couleur, les récupérer avant de la nouvelle police et les mettre à nouveau après l'avoir configuré.

+0

Cela a du sens pour la TextColor. Je ne vérifie pas ça, je vais devoir, merci. Bien que les couleurs que j'ai un problème avec sont la teinteColor des segments. Le segment TintColor du segment est-il masqué dans TextAttributes? – scooter133

+0

ressemble à la teinte n'est pas dans les attributs, vous devrez utiliser la méthode tintColor: pour les obtenir, définir la police puis utiliser setTintColor: – valexa

Questions connexes