web-dev-qa-db-fra.com

Définir une image de fond de bouton iPhone par programme

Dans Xcode, comment définir l'arrière-plan d'une UIButton en tant qu'image? Ou, comment pouvez-vous définir un dégradé d'arrière-plan dans la variable UIButton?

26
Linda

Code complet: 

+ (UIButton *)buttonWithTitle:(NSString *)title
                       target:(id)target
                     selector:(SEL)selector
                        frame:(CGRect)frame
                        image:(UIImage *)image
                 imagePressed:(UIImage *)imagePressed
                darkTextColor:(BOOL)darkTextColor
{
    UIButton *button = [[UIButton alloc] initWithFrame:frame];

    button.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

    [button setTitle:title forState:UIControlStateNormal];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];


    UIImage *newImage = [image stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0];
    [button setBackgroundImage:newImage forState:UIControlStateNormal];

    UIImage *newPressedImage = [imagePressed stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0];
    [button setBackgroundImage:newPressedImage forState:UIControlStateHighlighted];

    [button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside];

    // in case the parent view draws with a custom color or gradient, use a transparent color
    button.backgroundColor = [UIColor clearColor];

    return button;
}

UIImage *buttonBackground = UIImage imageNamed:@"whiteButton.png";
UIImage *buttonBackgroundPressed = UIImage imageNamed:@"blueButton.png";

CGRect frame = CGRectMake(0.0, 0.0, kStdButtonWidth, kStdButtonHeight);

UIButton *button = [FinishedStatsView buttonWithTitle:title
                                               target:target
                                             selector:action
                                                frame:frame
                                                image:buttonBackground
                                         imagePressed:buttonBackgroundPressed
                                        darkTextColor:YES];

[self addSubview:button]; 

Pour définir une image:

UIImage *buttonImage = [UIImage imageNamed:@"Home.png"];
[myButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
[self.view addSubview:myButton];

Pour supprimer une image:

[button setBackgroundImage:nil forState:UIControlStateNormal];
66
Dr. Rajesh Rolen

Ça va marcher

UIImage *buttonImage = [UIImage imageNamed:@"imageName.png"];
[btn setImage:buttonImage forState:UIControlStateNormal];
[self.view addSubview:btn];
17
Pathetic Learner

Si cela aide quelqu'un, setBackgroundImage n'a pas fonctionné pour moi, mais setImage l'a fait.

5
RanLearns

Vous pouvez définir une image de fond sans aucun code! 

Il vous suffit d'appuyer sur le bouton correspondant à votre image dans Main.storyboard, puis, dans la barre utilities à droite, appuyez sur l'inspecteur attributs et définissez l'arrière-plan sur l'image souhaitée! Assurez-vous que vous avez la photo souhaitée dans les fichiers de support à gauche.

3
JELLYFUN

Rapide

Définissez l'image du bouton comme suit:

let myImage = UIImage(named: "myImageName")
myButton.setImage(myImage , forState: UIControlState.Normal)

myImageName est le nom de votre image dans votre catalogue d’actifs. 

2
Suragch

Lorsque vous définissez une image dans une tableViewCell ou collectionViewCell, cela a fonctionné pour moi:

Placez le code suivant dans votre cellForRowAtIndexPath ou cellForItemAtIndexPath

// Obtient le pointeur sur la cellule. La réponse suppose que vous avez fait cela, mais ici, pour être complet.

CheeseCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cheeseCell" forIndexPath:indexPath];

// Récupère l'image de la bibliothèque de documents et la définit dans la cellule.

UIImage *myCheese = [UIImage imageNamed:@"swissCheese.png"];
[cell.cheeseThumbnail setImage:myCheese forState:UIControlStateNormal];

NOTE: xCode semblait se raccrocher à cela pour moi. Je devais redémarrer xCode et le simulateur, cela fonctionnait correctement.

Cela suppose que vous avez configuré fromage en tant qu'IBOutlet ... et quelques autres éléments ... espérons que vous êtes suffisamment familiarisé avec les vues de table/collection et que vous pouvez l'adapter.

J'espère que cela t'aides.

2
kmiklas

Dans une ligne, nous pouvons définir l'image avec ce code

[buttonName setBackgroundImage:[UIImage imageNamed:@"imageName"] forState:UIControlStateNormal];
0