web-dev-qa-db-fra.com

UIButton: définition de l'image pour l'état sélectionné en surbrillance

Je définis des images pour les états des boutons Normal, Surligné et Sélectionné, mais lorsque le bouton est dans l’état sélectionné et que je l’applique/le surligne, je ne vois pas mon image en surbrillance, mais une image grisée .. état en surbrillance lorsque le bouton sélectionné?

mon code:

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];

quand je fais:

[button setSelected:YES];

et appuyez sur le bouton, l’image "pressure.png" ne sélectionne pas.

149
user478681

J'ai trouvé la solution: besoin d'ajouter une ligne d'addition

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
226
user478681

Vous pouvez le faire dans Interface Builder.

Sélectionnez la UIButton que vous souhaitez définir dans IB puis passez au attributes inspector.

Dans les captures d'écran, j'utilise un type de bouton personnalisé, mais cela n'a pas d'importance .

Custom Default

enter image description here

enter image description here

113
Ríomhaire

Je pense que la plupart des affiches ici manquent complètement le point. J'ai eu le même problème. La question initiale concernait l'état en surbrillance d'un bouton sélectionné (COMBINAISON DES DEUX ÉTATS) qui ne peut pas être défini dans IB et revient à l'état par défaut avec un assombrissement en cours. Seule solution efficace dans un poste mentionné:

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
27
alghanor

Swift 3

// Default state (previously `.Normal`)
button.setImage(UIImage(named: "image1"), for: [])

// Highlighted
button.setImage(UIImage(named: "image2"), for: .highlighted)

// Selected
button.setImage(UIImage(named: "image3"), for: .selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), for: [.selected, .highlighted])

Pour définir l'image de fond, nous pouvons utiliser setBackgroundImage(_:for:)

Swift 2.x

// Normal
button.setImage(UIImage(named: "image1"), forState: .Normal)

// Highlighted
button.setImage(UIImage(named: "image2"), forState: .Highlighted)

// Selected
button.setImage(UIImage(named: "image3"), forState: .Selected)

// Selected + Highlighted
button.setImage(UIImage(named: "image4"), forState: [.Selected, .Highlighted])
26
kvothe

Si vous avez une bonne raison de le faire, cela fera l'affaire

ajoutez ces objectifs:

[button addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(buttonTouchUp:) forControlEvents:UIControlEventTouchUpInside];


-(void)buttonTouchDown:(id)sender{
    UIButton *button=(UIButton *)sender;
    if(button.selected){
        [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateNormal];
    }
}

-(void)buttonTouchUp:(id)sender{
    UIButton *button=(UIButton *)sender;
    [button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
}
11
Jorge

Dans Swift 3.x, vous pouvez définir une image en surbrillance lorsque le bouton est sélectionné de la manière suivante:

// Normal state
button.setImage(UIImage(named: "normalImage"), for: .normal) 

// Highlighted state (before button is selected)
button.setImage(UIImage(named: "pressedImage"), for: .highlighted)

// Selected state
button.setImage(UIImage(named: "selectedImage"), for:  .selected)

// Highlighted state (after button is selected)
button.setImage(UIImage(named: "pressedAfterBeingSelectedImage"), 
                for:  UIControlState.selected.union(.highlighted))
7
Ashish Verma

Dans Swift, vous pouvez faire:

button.setImage(UIImage(named: "selected"), 
                forState: UIControlState.selected.union(.highlighted))
5
Roland Keesom

Corrigez-moi si je me trompe. En faisant

   [button setSelected:YES];

vous changez clairement l'état des boutons comme sélectionné. Donc, naturellement, par le code que vous avez fourni, l'image sera celle de l'état sélectionné dans votre cas.

2
visakh7

Si quelqu'un se demande comment cela fonctionne dans Swift, voici ma solution:

button.setImage("normal.png", forState: .Normal)
button.setImage("highlighted.png", forState: .Highlighted)
button.setImage("selected.png", forState: .Selected)

var selectedHighLightedStates: UIControlState = UIControlState.Highlighted
selectedHighLightedStates = selectedHighLightedStates.union(UIControlState.Selected)
button.setImage("selectedHighlighted.png", forState: selectedHighLightedStates)
1
basedgod

J'ai eu un problème pour régler imageView.highlighted = NO; (RéglerOUIfonctionnait correctement et l'image a été remplacée par celle en surbrillance) 

La solution appelait [imageView setHighlighted:NO];

Tout a bien fonctionné.

0
DrArt

Swift 3+

button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])

OU

button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))

Cela signifie que le bouton actuel dans l'état selected, puis vous le touchez, affiche l'état highlight.

0
yuanjilee

Xamarin C #

Faire bitwise OR ne fonctionne pas pour une raison quelconque

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected | UIControlState.Highlighted | UIControlState.Focused);

Les oeuvres suivantes

button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Highlighted);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Focused);
0
Pierre

D'où voulez-vous appeler? 

[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];

La méthode: 

-(void)test:(id)sender{
    UIButton *button=(UIButton *)sender;
    if (_togon){
      [button setTitleColor:UIColorFromRGB(89,89, 89) forState:UIControlStateNormal];
      _togon=NO;
    }
    else{
      [button setTitleColor:UIColorFromRGB(28, 154, 214) forState:UIControlStateNormal];
      _togon=YES;
    }
}

Merci à Jorge mais je l’ai amélioré un peu en lui donnant la solution complète 

0
Kingsley Mitchell