2010-02-20 10 views
0

J'ai ajouté un contrôle UISlider à une application iPhone View et j'ai câblé un champ de texte qui récupère les valeurs du curseur. Pour s'adapter aux couleurs de l'interface utilisateur dans l'application, j'ai besoin de changer la couleur du curseur. Avec un peu de googling, j'ai pu trouver 2 échantillons qui le font (http://blog.hill-it.be/post/2009/03/23/Pimp-My-UISlider et http://developer.apple.com/iphone/library/samplecode/UICatalog/index.html) mais je suis coincé parce que je ne suis pas sûr d'où je devrais appeler le code.Comment personnaliser le contrôle UISlider de l'iPhone à l'exécution - où dois-je placer le code de mise à jour de la couleur?

J'ai une méthode qui devrait renvoyer un objet UISlider personnalisé, mais comment remplacer celui que j'ai créé via le constructeur d'interface qui réside dans mes sliderViewController.m et sliderViewController.h?

- (UISlider *)createCustomSlider 
{ 
    CGRect frame = CGRectMake(174, 12.0, 120.0, 7.0); 
    UISlider customSlider = [[UISlider alloc] initWithFrame:frame]; 
    [customSlider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged]; 
    // in case the parent view draws with a custom color or gradient, use a transparent color 
    customSlider.backgroundColor = [UIColor clearColor]; 
    UIImage *stetchLeftTrack = [[UIImage imageNamed:@"orangeslide.png"] 
          stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0]; 
    UIImage *stetchRightTrack = [[UIImage imageNamed:@"yellowslide.png"] 
          stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0]; 
    [customSlider setThumbImage: [UIImage imageNamed:@"slider_ball.png"]  forState:UIControlStateNormal]; 
    [customSlider setMinimumTrackImage:stetchLeftTrack forState:UIControlStateNormal]; 
    [customSlider setMaximumTrackImage:stetchRightTrack forState:UIControlStateNormal]; 
    customSlider.minimumValue = 0.0; 
    customSlider.maximumValue = 100.0; 
    customSlider.continuous = YES; 
    customSlider.value = 50.0; 

    return customSlider; 
} 

Avec .NET je aurait normalement un code généré par l'éditeur WinForms que je serais alors en mesure de passer outre en créant un nouvel objet et attribuer à la référence existante.

Répondre

1

Vous ne devriez pas le faire de cette façon. Vous avez trois options:

  1. Au lieu de renvoyer un nouvel objet UISlider à votre méthode, modifiez l'instance UISlider existante que vous avez créée dans IB.
  2. Écrivez une sous-classe UISlider personnalisée et mettez votre code de personnalisation dans sa méthode awakeFromNib. Faites de cette classe la classe de l'instance de curseur dans IB.
  3. Supprimez complètement le curseur de la NIB et créez-le par programme comme vous le faites dans votre méthode. Ensuite, ajoutez-le en tant que sous-vue à votre mainView.