web-dev-qa-db-fra.com

UIButton avec titleLabel multiligne dans InterfaceBuilder

Je me demandais s'il existait un bon moyen de transformer UIButtons avec plusieurs lignes titleLabel dans Interface Builder. Je n'en ai trouvé aucun et insère une UILabel distincte au-dessus de chaque bouton et il est difficile de suivre sa couleur dans la presse et d'autres événements. 

Peut-être y a-t-il de meilleures alternatives faites dans le code s'il n'y a pas de telle manière dans IB?

20
Sergey Grischyov

Code:

Pour autoriser plusieurs lignes, vous pouvez utiliser:

button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

Dans iOS 6 , UILineBreakModeWordWrap et UITextAlignmentCenter sont obsolètes, utilisez donc:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;

Interface Builder:

  • Dans le générateur d'interface, sélectionnez UIButton
  • dans le volet Utilitaires de droite sous Inspecteur d'attributs , une option pour Saut de ligne
  • Choisissez Word Wrap
56
Mrunal

Vous pouvez effectuer plusieurs opérations uniquement dans Interface Builder.

  • D'abord en réglant simplement la fonction de bouclage. Cela offre cependant une personnalisation limitée.
  • Pour plus de personnalisation, changez le "Texte brut" en "Texte attribué" et vous pourrez alors faire la plupart des choses sans code.
4
DBD

Si vous utilisez uniquement XCode 9.4 brut:

Définissez le saut de ligne sur n'importe quelle option (pour activer numberOfLines) dans l'inspecteur Attributs:

 The first step in XCode

Ensuite, vous pouvez définir KeyPath comme

titleLabel.numberOfLines

dans l'inspecteur d'identité:

 The second step in XCode

1

Mentionnons que si vous ne voulez pas que Word s'emballe, mais voulez quand même obtenir un titre multiligne sur un bouton UIButton, vous pouvez le faire en définissant lineBreakMode avant numberOfLines, Ceci parce que lineBreakMode semble annuler le nombre numberOfLines défini par ce que nous faisons dans cet ordre.

Rapide:

button.titleLabel? .lineBreakMode = NSLineBreakMode.byTruncatingTail

button.titleLabel? .numberOfLines = 2

button.setTitle (myTitle, pour: UIControlState.normal)

0
saigen