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.
J'ai trouvé la solution: besoin d'ajouter une ligne d'addition
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
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 .
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];
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])
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];
}
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))
Dans Swift, vous pouvez faire:
button.setImage(UIImage(named: "selected"),
forState: UIControlState.selected.union(.highlighted))
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.
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)
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é.
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
.
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);
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