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.

Ali
la source

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];
Kendall Helmstetter Gelner
la source
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; 
user542584
la source
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.

Mike Gledhill
la source
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

Ben Packard
la source
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];
Matt Connolly
la source
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!

IronmanX46
la source
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
Sruit A.Suk
la source
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
}
Matias Elorriaga
la source
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

Dan Alboteanu
la source
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

Mike
la source
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;
abbood
la source
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);
Sloba
la source
0

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

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0
Amr en colère
la source
-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.

Brandon
la source
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