88 votes

UIButton avec deux lignes de texte dans le titre (numberOfLines=2)

Je suis en train de faire un UIButton qui a deux lignes de texte dans son titleLabel. 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 de cela, le texte ne s'affiche sur une seule ligne. Il semble que la seule façon d'atteindre plus d'une ligne de texte en UIButton.titleLabel est de fixer numberOfLines=0 et l'utilisation UILineBreakModeWordWrap. Mais cela ne garantit pas que le texte soit exactement deux lignes.

En utilisant un simple UILabel, cependant, ne 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];

Personne ne sait comment faire de l' UIButton travailler avec deux lignes? Est la seule solution pour créer un UILabel pour tenir le texte, et l'ajouter en tant que sous-vue de la touche?

146voto

Sean Points 441

Vous n'avez pas besoin d'ajouter un UILabel à la UIButton. C'est simplement plus d'objets et de travail.

Définir ces propriétés sur la titleLabel de votre bouton.

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0

89voto

Totumus Maximus Points 4102

Si vous souhaitez que 2 lignes de texte sur le dessus de votre UIButton vous devez ajouter un UIlabel sur le dessus de ce que fait précisément que.

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.

88voto

Borut Tomazin Points 2196

Vous pouvez faire tout cela beaucoup plus facile. Dans Interface Builder ensemble Line Break sur UIButton d' Word Wrap. Que vous pouvez insérer plusieurs lignes de titre. Il suffit de frapper Option + Return clés pour faire de nouvelle ligne. Vous aurez également besoin de faire cela dans le code:

myButton.titleLabel.textAlignment = UITextAlignmentCenter;

C'est aussi simple que cela. Espérons que cela aide...

21voto

Chigurh Points 865
 button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;

button.titleLabel.textAlignment = NSTextAlignmentCenter;

[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

9voto

furins Points 2250

Pour éviter complètement la nécessité de modifier le code, et donc la nécessité de la sous-classe votre point de vue, dans Xcode5 et de plus vous pouvez suivre Borut Tomazin suggestion:

Dans Interface Builder (ou scénario) jeu de Saut de Ligne Retour Automatique À La Ligne. Que vous pouvez insérer plusieurs lignes de titre. Il suffit de frapper Option + Retour des clés pour faire de nouvelle ligne.

et puis, dans l' Définis par l'Utilisateur d'Exécution des Attributs que vous pouvez ajouter

Chemin d'accès clé: titleLabel.textAlignment
Type: Number
Valeur: 1

Remarque: c'est peut-être pas complètement "future proof" depuis que nous sommes en train de traduire l' UITextAlignmentCenter constante dans sa valeur numérique (et cette constante peut changer à mesure que de nouvelles versions iOS sont libérés), mais il semble à l'abri dans un avenir proche.

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