69 votes

UIButton avec image et texte possible ?

J'ai un bouton dont la largeur est de 200 et la hauteur de 270. Je veux avoir du texte et une image sur le même bouton. Pas comme une image de fond sur ce texte. Au lieu de cela, je veux afficher le texte de hauteur 120 et l'image de hauteur 150 sur le même bouton. Comment faire ?

116voto

Aditya Korde Points 3503

Vous pouvez utiliser ce code, il vous sera utile.

.h file code
IBOutlet UIButton *testBtn;

.m file code
[testBtn setImage: [UIImage imageNamed:@"Image name.png"] forState:UIControlStateNormal];
[testBtn setTitleEdgeInsets:UIEdgeInsetsMake(70.0, -150.0, 5.0, 5.0)];
[testBtn setTitle:@"Your text" forState:UIControlStateNormal];

Ajustez les coordonnées et la taille de votre bouton en fonction de vos besoins. Il s'agit d'un exemple de code pour vous guider.

PS : Prenez un UIButton dans le fichier nib>Faites-en un bouton personnalisé>Connectez l'IBOutlet à votre bouton personnalisé dans le fichier nib.c'est tout.

0 votes

Bonjour Aditya, merci d'avoir répondu à ma question. J'ai essayé. le code fonctionne parfaitement mais un problème est mon image n'est pas la taille fixe. comment définir la taille de l'image de sorte qu'il peut être adapté à la taille du bouton ?

1 votes

Cela peut également être fait directement dans le fichier NIB, ce qui vous permet d'avoir un aperçu de ce que cela donnera sans avoir à l'expérimenter dans le code.

3 votes

Pour ceux qui ont besoin de réaliser le bouton en code, vous devez ajuster l'image en définissant testBtn.imageEdgeInsets = UIEdgeInsetsMake(top, left, bottom, right) ;

15voto

Le code ci-dessous montre comment placer une image et du texte dans un bouton à l'aide des propriétés setImageEdgeInsets et setTitleEdgeInsets de la classe UIButton.

UIButton *butt=[UIButton buttonWithType:UIButtonTypeCustom ];
    [butt setFrame:CGRectMake(0, 0, 100, 100)];
    [butt setBackgroundImage:[UIImage imageNamed:@"sig.png"] forState:UIControlStateNormal];
    [butt setImageEdgeInsets:UIEdgeInsetsMake(0.0, 0.0, 50.0, 0.0)];
    [butt setTitleEdgeInsets:UIEdgeInsetsMake(75.0, 0.0, 0.0, 0.0)];
    [butt setTitle:@"hello" forState:UIControlStateNormal];
    [butt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [self.view addSubview:butt];

1 votes

Cela n'a pas fonctionné pour moi jusqu'à ce que je remplace setBackgroundImage par setImage et cela a fonctionné parfaitement.

1 votes

L'image de fond et l'image sont différentes

0 votes

Je pense que la question est de savoir comment définir une image avec un titre et non pas comment définir l'image de fond avec un titre.

6voto

ohnit Points 148

Oui, vous pouvez afficher une image et un titre dans le même bouton, à condition qu'ils soient tous deux suffisamment petits pour tenir. Le plus dur est à venir, lorsque vous devez vous occuper du placement.

Vous pouvez jouer avec le contentVerticalAlignment y contentHorizontalAlignment les propriétés de la UIButton (hérité de UIControl ).

Vous pouvez également utiliser le titleEdgeInsets y imageEdgeInsets pour décaler le titre et l'image de l'emplacement qu'ils obtiennent en fonction des propriétés d'alignement.

Si vous souhaitez un placement très précis ou personnalisé, je vous suggère de remplacer la fonction titleRectForContentRect: y imageRectForContentRect: méthodes de l UIButton . Ils vous permettent de définir les cadres de votre titre et de votre image, et ils sont appelés chaque fois que le bouton doit être mis en page. Un avertissement, si vous voulez faire référence à self.titleLabel à l'intérieur de titleRectForContentRect: assurez-vous que self.currentTitle est défini en premier. J'ai obtenu une erreur d'accès, il est possible que la méthode soit appelée lors de la première initialisation du titleLabel.

6voto

CodeWriter Points 1962

Utilisez le concept de sous-vues. Prenez 3 contrôles, UIButton (200x270), UILabel (200x120) et UIImageView (200x150). Attribuez l'image à la UIImageView et définissez le texte de la UILabel . Positionnez vos contrôles d'étiquettes et d'images en fonction de l'emplacement (x,y) de l'objet de l'image. UIButton .

Au final, vous devriez avoir quelque chose comme :

Pour les instances suivantes :

UIButton *button;
UILabel *label;
UIImageView *imageView;

[button addSubView:imageView];
[button addSubView:label];

5voto

Amit Battan Points 1208
[testBtn setBackgroudImage: [UIImage imageNamed:@"Image name.png"] forState:UIControlStateNormal];
[testBtn setTitle:@"Your text" forState:UIControlStateNormal];

0 votes

L'utilisateur cherchait un moyen de faire cela sans image de fond.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X