Je vois des réponses très compliquées, toutes utilisant du code. Cependant, si vous utilisez Interface Builder , il existe un moyen très simple de le faire:
Sélectionnez le bouton et définissez un titre et une image. Notez que si vous définissez l'arrière-plan au lieu de l'image, l'image sera redimensionnée si elle est plus petite que le bouton.
Définissez la position des deux éléments en modifiant le bord et les encarts. Vous pouvez même contrôler l'alignement des deux dans la section Contrôle.
Vous pouvez même utiliser la même approche par code, sans créer des UILabels et UIImages à l'intérieur comme d'autres solutions proposées. Restez toujours simple!
EDIT: joint un petit exemple ayant les 3 choses définies (titre, image et arrière-plan) avec des encarts corrects
C'est correct. Vous voudrez utiliser les encarts de bord sur le titre et l'image pour aligner correctement les deux. Vous pouvez le faire dans le code en définissant les propriétés titleEdgeInsets et contentEdgeInsets.
Tim Mahoney
4
oui, c'est presque correct. il vous suffit de définir l' Backgroundimage au lieu de Image, sinon vous ne verrez pas le titre ni même définir les valeurs d'encart pour repositionner le titre.
holex
6
J'ai eu des problèmes avec ça aussi. Si votre titre ne s'affiche pas, essayez de lui définir un décalage gauche négatif. Il semble qu'IB le pousse automatiquement à droite de l'image.
brians
8
Cela n'affiche que l'image et le texte côte à côte, non? Existe-t-il un moyen de changer l'orientation de haut en bas? C'est ce que dit la question initiale et ce que je recherche également. Merci!
flohei
12
Pour ceux qui utilisent Xcode 8, vous pouvez ne pas voir la propriété Edge. Le texte peut également disparaître après l'ajout d'une image. Cela change le texte en blanc et si vous êtes sur un fond blanc, il semble qu'il a disparu. Changez la couleur du texte et il apparaîtra près de l'image. Vous pouvez ajuster les encarts sous l'inspecteur de taille.
Micah Montoya
67
Je pense que vous recherchez cette solution pour votre problème:
UIButton*_button =[UIButton buttonWithType:UIButtonTypeCustom];[_button setFrame:CGRectMake(0.f,0.f,128.f,128.f)];// SET the values for your wishes[_button setCenter:CGPointMake(128.f,128.f)];// SET the values for your wishes[_button setClipsToBounds:false];[_button setBackgroundImage:[UIImage imageNamed:@"jquery-mobile-icon.png"] forState:UIControlStateNormal];// SET the image name for your wishes[_button setTitle:@"Button" forState:UIControlStateNormal];[_button.titleLabel setFont:[UIFont systemFontOfSize:24.f]];[_button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];// SET the colour for your wishes[_button setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];// SET the colour for your wishes[_button setTitleEdgeInsets:UIEdgeInsetsMake(0.f,0.f,-110.f,0.f)];// SET the values for your wishes[_button addTarget:self action:@selector(buttonTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside];// you can ADD the action to the button as well like
... le reste de la personnalisation du bouton est de votre devoir maintenant, et n'oubliez pas d'ajouter le bouton à votre vue.
MISE À JOUR N ° 1 et MISE À JOUR N ° 2
ou, si vous n'avez pas besoin d'un bouton dynamique, vous pouvez ajouter votre bouton à votre vue dans Interface Builder et vous pouvez également définir les mêmes valeurs ici. c'est à peu près la même chose, mais voici cette version également en une simple image.
vous pouvez également voir le résultat final dans Interface Builder tel qu'il est sur la capture d'écran.
EdgeInsets ne fonctionne que lorsque vous avez "définir l'image du bouton" et lorsque vous définissez l'image du bouton, vous ne pouvez pas voir le titre. Et si vous définissez l'image d'arrière-plan, EdgeInsets ne peut pas s'appliquer à l'image. et vous pouvez voir le titre. Ainsi, vous ne pouvez pas définir edgeinsect sur les deux en même temps.
Badal Shah
@BadalShah, oui, il y a des scénarios (selon la taille du bouton, la taille de l'image, la longueur du titre, etc ...) où ce que vous avez dit est vrai et que vous ne pouvez pas voir le titre et l' image en même temps parce que l' image repousse le titre de la zone visible; mais ce scénario n'est pas du tout générique, la situation générique est que le titre et l' image pourraient et apparaîtront en même temps.
holex
32
Xcode-9 et Xcode-10 Apple ont fait quelques changements concernant Edge Inset maintenant, vous pouvez le changer sous l'inspecteur de taille.
Veuillez suivre les étapes ci-dessous:
Étape 1:
saisissez le texte et sélectionnez l'image que vous souhaitez afficher:
Étape-2:
Sélectionnez le contrôle du bouton selon vos besoins, comme indiqué dans l'image ci-dessous:
Étape 3:
Maintenant, passez à l'inspecteur de taille et ajoutez de la valeur selon vos besoins:
J'ai besoin de positionner l'image en haut et le texte sous l'image doit être cliquable.
Codesen
4
Utilisez ce code:
UIButton*button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
button.imageView.frame=CGRectMake(0.0f,0.0f,50.0f,44.0f);///You can replace it with your own dimensions.UILabel*label=[[UILabel alloc] initWithFrame:CGRectMake(0.0f,35.0f,50.0f,44.0f)];///You can replace it with your own dimensions.[button addSubview:label];
J'ai rencontré le même problème et je le corrige en créant une nouvelle sous-classe de UIButtonet en remplaçant la layoutSubviews:méthode comme ci-dessous:
Je pense que la réponse d'Angel García Olloqui est une autre bonne solution, si vous les placez toutes manuellement avec le constructeur d'interface, mais je garderai ma solution car je n'ai pas à modifier les encarts de contenu pour chacun de mes boutons.
Simple et utile. Comment définir l'image et le titre en surbrillance?
DawnSong
pour lable setHighlightedTextColor et vous devez jouer avec forControlEvents
Rajneesh071
3
Vous devez créer une vue d'image personnalisée pour l'image et une étiquette personnalisée pour le texte et ajouter à votre bouton en tant que sous-vues. C'est tout.
C'est vraiment simple, il suffit d'ajouter l'image à l'arrière-plan de votre bouton et de donner du texte au titre du bouton pour uicontrolstatenormal. C'est tout.
[btn setBackgroundImage:[UIImage imageNamed:@"img.png"] forState:UIControlStateNormal];[btn setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];[btn setTitle:@"Click Me" forState:UIControlStateNormal];
Réponses:
Je vois des réponses très compliquées, toutes utilisant du code. Cependant, si vous utilisez Interface Builder , il existe un moyen très simple de le faire:
Vous pouvez même utiliser la même approche par code, sans créer des UILabels et UIImages à l'intérieur comme d'autres solutions proposées. Restez toujours simple!
EDIT: joint un petit exemple ayant les 3 choses définies (titre, image et arrière-plan) avec des encarts corrects
la source
Background
image au lieu deImage
, sinon vous ne verrez pas le titre ni même définir les valeurs d'encart pour repositionner le titre.Je pense que vous recherchez cette solution pour votre problème:
... le reste de la personnalisation du bouton est de votre devoir maintenant, et n'oubliez pas d'ajouter le bouton à votre vue.
MISE À JOUR N ° 1 et MISE À JOUR N ° 2
ou, si vous n'avez pas besoin d'un bouton dynamique, vous pouvez ajouter votre bouton à votre vue dans Interface Builder et vous pouvez également définir les mêmes valeurs ici. c'est à peu près la même chose, mais voici cette version également en une simple image.
vous pouvez également voir le résultat final dans Interface Builder tel qu'il est sur la capture d'écran.
la source
Xcode-9 et Xcode-10 Apple ont fait quelques changements concernant Edge Inset maintenant, vous pouvez le changer sous l'inspecteur de taille.
Veuillez suivre les étapes ci-dessous:
Étape 1: saisissez le texte et sélectionnez l'image que vous souhaitez afficher:
Étape-2: Sélectionnez le contrôle du bouton selon vos besoins, comme indiqué dans l'image ci-dessous:
Étape 3: Maintenant, passez à l'inspecteur de taille et ajoutez de la valeur selon vos besoins:
la source
mais le code suivant affichera l'étiquette ci-dessus et l'image en arrière-plan
Il n'est pas nécessaire d'utiliser l'étiquette et le bouton dans le même contrôle car UIButton a des propriétés UILabel et UIimageview.
la source
Utilisez ce code:
la source
Utilisez ce code:
la source
J'ai rencontré le même problème et je le corrige en créant une nouvelle sous-classe de
UIButton
et en remplaçant lalayoutSubviews:
méthode comme ci-dessous:Je pense que la réponse d'Angel García Olloqui est une autre bonne solution, si vous les placez toutes manuellement avec le constructeur d'interface, mais je garderai ma solution car je n'ai pas à modifier les encarts de contenu pour chacun de mes boutons.
la source
Créez
UIImageView
etUILabel
, et définissez l'image et le texte sur les deux ... puis placez un bouton personnalisé sur imageView et Label ....la source
Vous devez créer une vue d'image personnalisée pour l'image et une étiquette personnalisée pour le texte et ajouter à votre bouton en tant que sous-vues. C'est tout.
À des fins de test, utilisez la
yourButtonSelected:
méthodeJe pense que cela vous sera utile.
la source
C'est vraiment simple, il suffit d'ajouter l'image à l'arrière-plan de votre bouton et de donner du texte au titre du bouton pour uicontrolstatenormal. C'est tout.
la source
version rapide:
la source