Bordé UITextView


127

Je veux avoir une fine bordure grise autour d'un UITextView. J'ai parcouru la documentation Apple mais je n'ai trouvé aucune propriété. Veuillez aider.

Réponses:


306
#import <QuartzCore/QuartzCore.h>

....

// typically inside of the -(void) viewDidLoad method
self.yourUITextView.layer.borderWidth = 5.0f;
self.yourUITextView.layer.borderColor = [[UIColor grayColor] CGColor];

62
Je ne pensais pas qu'il fallait vraiment beaucoup d'explications, la vue est l'UITextView et le code va partout où vous avez configuré la vue (awakeFromNib ou viewDidLoad sont deux endroits possibles). Puisqu'aucun code n'a été donné, il n'y a aucun moyen de donner un bon contexte en réponse.
Kendall Helmstetter Gelner

XCode ne me laisse pas définir la bordure du calque. Il dit que la couche est en lecture seule. J'ai créé UIView (où mettre certains éléments) et j'ai essayé de définir une bordure sur cette vue. Essayer de faire cela self.myView.layer.borderWidth ..., mais comme je l'ai dit, la couche est en lecture seule, donc la couche n'a aucune méthode ou variable à définir
Paulius Vindzigelskis

2
Avez-vous importé QuartzCore? Vous pouvez également essayer de sortir un CALayer de self.myView et de définir borderWidth à ce sujet. C'est réglable.
Kendall Helmstetter Gelner

Quelques informations supplémentaires sur "layer" étant en lecture seule dans UIView (la propriété de la couche est, mais vous pouvez définir des valeurs dans la couche pour une vue): stackoverflow.com/questions/12837077/...
Kendall Helmstetter Gelner

42

Ajoutez ce qui suit pour les coins arrondis:

self.yourUITextview.layer.cornerRadius = 8; 

23

Voici le code que j'ai utilisé, pour ajouter une bordure autour de mon TextViewcontrôle nommé "tbComments":

self.tbComments.layer.borderColor = [[UIColor grayColor] CGColor];
self.tbComments.layer.borderWidth = 1.0;
self.tbComments.layer.cornerRadius = 8;

Et voici à quoi cela ressemble:

entrez la description de l'image ici

Peasy facile.


19

J'ajoute UIImageViewcomme sous-vue du UITextView. Cela correspond à la bordure native sur a UITextField, y compris le dégradé de haut en bas:

entrez la description de l'image ici

textView.backgroundColor = [UIColor clearColor];
UIImageView *borderView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, textView.frame.size.width, textView.frame.size.height)];
borderView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIImage *textFieldImage = [[UIImage imageNamed:@"TextField.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 8, 15, 8)];
borderView.image = textFieldImage;
[textField addSubview: borderView];
[textField sendSubviewToBack: borderView];

Voici les images png que j'utilise et une représentation jpg:

@1 fois

À 2x

entrez la description de l'image ici


Bonne solution. Ces images sont-elles les vôtres? Sommes-nous libres de les utiliser?
James Webster

Ces images sont «calquées» sur celles utilisées dans les propres applications d'Apple. En vérité, je les ai extraits et j'ai fait très peu de changements, voire aucun. À utiliser à vos risques et périls. Le but était d'imiter l'aspect et la sensation natifs, il est donc difficile de trouver quelque chose qui semble très différent. Pour ce que cela vaut, j'ai expédié et approuvé des applications utilisant cette image sans problème.
Ben Packard

Les fichiers image png semblent avoir été supprimés - je n'ai pas l'intention de le mettre constamment à jour avec un nouvel emplacement d'image, donc je m'excuse si le jpg ne fonctionne pas pour vous. Je peux re-télécharger comme et quand demandé via un commentaire.
Ben Packard

3
Avec l'image ci-jointe, cela fonctionne le mieux: coderesizableImageWithCapInsets: UIEdgeInsetsMake (28, 14, 28, 14)
RefuX

Les liens WikiUpload (pour les deux images) ne parviennent pas à trouver les fichiers image maintenant. ;-(
Mike Gledhill

18

Fonctionne très bien, mais la couleur doit être a CGColor, pas UIColor:

view.layer.borderWidth = 5.0f;
view.layer.borderColor = [[UIColor grayColor] CGColor];

4
#import <QuartzCore / QuartzCore.h>
kolinko

6

Je pense que les réponses ci-dessus concernent les versions précédentes de Swift. J'ai un peu googlé et le code ci-dessous fonctionne pour Swift 4. Il suffit de le partager pour qui en profite.

self.textViewName.layer.borderColor = UIColor.lightGray.cgColor
self.textViewName.layer.borderWidth = 1.0
self.textViewName.layer.cornerRadius = 8

Bon codage!


Avec Swift5 et le mode sombre, vous pouvez même utiliser les couleurs du système:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
multitudes

4

pour la programmation Swift, utilisez ceci

tv_comment.layer.borderWidth = 2
tv_comment.layer.borderColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1).CGColor

Ou justeUIColor(white: 0.2, alpha: 1).CGColor
Leo

3

c'est aussi proche que possible d'un UITextField original

func updateBodyTextViewUI() {
    let borderColor = UIColor.init(red: 212/255, green: 212/255, blue: 212/255, alpha: 0.5)

    self.bodyTextView.layer.borderColor = borderColor.CGColor
    self.bodyTextView.layer.borderWidth = 0.8
    self.bodyTextView.layer.cornerRadius = 5
}

1

vous pouvez ajouter une bordure à UITextView à partir du Storyboard - Identity Inspector - Attribut d'exécution défini par l'utilisateur

entrez la description de l'image ici


0

Depuis iOS 8 et Xcode 6, je trouve maintenant que la meilleure solution est de sous-classer UITextView et de marquer la sous-classe comme IB_DESIGNABLE, ce qui vous permettra de visualiser la bordure dans le storyboard.

Entête:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

La mise en oeuvre:

#import "BorderTextView.h"

@implementation BorderTextView

- (void)drawRect:(CGRect)rect
{
    self.layer.borderWidth = 1.0;
    self.layer.borderColor = [UIColor blackColor].CGColor;
    self.layer.cornerRadius = 5.0f;
}

@end

Ensuite, faites simplement glisser votre UITextView dans le storyboard et définissez sa classe sur BorderTextView


0

La chose qui l'a fait fonctionner (en plus de suivre les réponses ici) est l'ajout de l' borderStyleattribut:

#import <QuartzCore/QuartzCore.h>
..

phoneTextField.layer.borderWidth = 1.0f;
phoneTextField.layer.borderColor = [[UIColor blueColor] CGColor];
phoneTextField.borderStyle = UITextBorderStyleNone;

0

Juste un petit ajout. Si vous élargissez un peu la bordure, cela interférera avec les côtés gauche et droit du texte. Pour éviter cela, j'ai ajouté la ligne suivante:

self.someTextView.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0);

0

Dans Swift 3, vous pouvez utiliser les deux lignes suivantes:

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0

-3

J'ai résolu ce problème dans le storyboard en mettant un complètement désactivé UIButtonderrière le UITextViewet en faisant la couleur d'arrière-plan de UITextViewclearColor. Cela fonctionne sans nécessiter de code ou de packages supplémentaires.


3
Bien sûr, cela ne fonctionne pas sous iOS 7, car les boutons n'ont pas de bords (les boutons ressemblent maintenant à des étiquettes)
Mike Gledhill
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.