J'essaie de créer un UIButton
qui a deux lignes de texte dans son intitulé label. C'est le code que j'utilise:
UIButton *titleButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleButton.titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
[titleButton setTitle:@"This text is very long and should get truncated at the end of the second line" forState:UIControlStateNormal];
titleButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
titleButton.titleLabel.numberOfLines = 2;
[self addSubview:titleButton];
Quand j'essaye ceci, le texte apparaît seulement sur une ligne. Il semble que la seule façon d'obtenir plus d'une ligne de texte dans UIButton.titleLabel
consiste à définir numberOfLines=0
et à utiliser UILineBreakModeWordWrap
. Mais cela ne garantit pas que le texte a exactement deux lignes.
Utiliser un UILabel
simple, cependant, fonctionne:
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[self addSubview:titleLabel];
Est-ce que quelqu'un sait comment faire fonctionner le UIButton
avec deux lignes? La seule solution est-elle de créer un UILabel
séparé pour contenir le texte et de l'ajouter en tant que sous-vue du bouton?
Réponse mise à jour pour les versions iOS les plus récentes
Puisqu'il s'agit de la réponse acceptée, a ajouté la réponse de @ Sean ici:
Définissez ces propriétés sur le label de titre de votre bouton.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.numberOfLines = 2; // if you want unlimited number of lines put 0
Swift 3 et 4:
button.titleLabel?.lineBreakMode = .byWordWrapping
button.titleLabel?.numberOfLines = 2 // if you want unlimited number of lines put 0
Réponse originale pour une ancienne version d'iOS
Si vous voulez 2 lignes de texte au-dessus de votre UIButton
, vous devez ajouter un UIlabel
dessus, qui fait précisément cela.
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[myButton addSubview:titleLabel]; //add label to button instead.
Mise à jour pour solution d'interface builder
La réponse de @Borut Tomazin a été ajoutée pour une réponse plus complète . Cette partie a été mise à jour à nouveau depuis l'amélioration de la réponse de @Borut Tomazin.
Vous pouvez le faire beaucoup plus facilement, sans code requis. Dans Interface Builder, définissez Line Break
sur UIButton sur Word Wrap
. Que vous pouvez insérer plusieurs lignes de titre. Appuyez simplement sur les touches Option + Return
pour créer une nouvelle ligne. Vous devrez également ajouter ceci à l'attribut d'exécution défini par l'utilisateur dans Interface Builder:
titleLabel.textAlignment Number [1]
Vous n'avez pas besoin d'ajouter un UILabel à UIButton. Ce ne sont que des objets supplémentaires et du travail.
Définissez ces propriétés sur le label de titre de votre bouton.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0
Rapide:
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping
button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0
Vous pouvez le faire beaucoup plus facilement, sans code requis. Dans Interface Builder, définissez Line Break
sur UIButton sur Word Wrap
. Que vous pouvez insérer plusieurs lignes de titre. Appuyez simplement sur les touches Option + Return
pour créer une nouvelle ligne. Vous devrez également ajouter ceci à l'attribut d'exécution défini par l'utilisateur dans Interface Builder:
titleLabel.textAlignment Number [1]
C'est si simple. J'espère que ça aide...
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
Pour éviter complètement le besoin de modifier le code, et donc le besoin de sous-classer votre vue, dans Xcode5 et versions supérieures, vous pouvez suivre la suggestion de Borut Tomazin:
Dans Interface Builder (ou storyboard), définissez le saut de ligne sur Word Wrap. Que vous pouvez insérer plusieurs lignes de titre. Il suffit de frapper Option + Return clés pour faire une nouvelle ligne.
et ensuite, dans le Attributs d'exécution définis par l'utilisateur vous pouvez ajouter
Chemin de la clé: titleLabel.textAlignment
Type: Number
Valeur: 1
Remarque: il se peut que cela ne soit pas tout à fait "pérenne" car nous traduisons la constante UITextAlignmentCenter
en sa valeur numérique (et que cette constante peut changer à mesure que de nouvelles versions iOS sont publiées), mais cela semble sûr. le proche avenir.