UITextView con bordi


127

Voglio avere un sottile bordo grigio attorno a un file UITextView. Ho esaminato la documentazione Apple ma non sono riuscito a trovare alcuna proprietà lì. Per favore aiuto.

Risposte:


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
Non pensavo che ci fosse davvero bisogno di molte spiegazioni, la vista è UITextView e il codice va ovunque tu abbia impostato la vista (awakeFromNib o viewDidLoad sono due possibili posti). Poiché non è stato fornito alcun codice, non è possibile fornire un buon contesto in risposta.
— Kendall Helmstetter Gelner

XCode non mi permette di impostare il bordo per il livello. Dice che il livello è di sola lettura. Ho creato UIView (dove ho messo alcuni elementi) e ho provato a impostare il bordo di quella vista. self.myView.layer.borderWidth ...Sto provando a farlo , ma come ho detto, il livello è di sola lettura, quindi il livello non ha metodi o variabili da impostare
— Paulius Vindzigelskis

2
Hai importato QuartzCore? Potresti anche provare a estrarre un CALayer da self.myView e impostare borderWidth su quello. È impostabile.
— Kendall Helmstetter Gelner

Qualche informazione in più su "layer" di essere di sola lettura in UIView (la proprietà del livello è, ma è possibile impostare i valori nello strato per una vista): stackoverflow.com/questions/12837077/...
— Kendall Helmstetter Gelner

42

Aggiungi quanto segue per gli angoli arrotondati:

self.yourUITextview.layer.cornerRadius = 8; 

23

Ecco il codice che ho usato per aggiungere un bordo attorno al mio TextViewcontrollo denominato "tbComments":

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

Ed ecco come appare:

inserisci qui la descrizione dell'immagine

Vai tranquillo.


19

Aggiungo UIImageViewcome sottoview di UITextView. Questo corrisponde al bordo nativo su a UITextField, incluso il gradiente dall'alto verso il basso:

inserisci qui la descrizione dell'immagine

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];

Queste sono le immagini png che uso e una rappresentazione jpg:

@ 1x

@ 2x

inserisci qui la descrizione dell'immagine


Buona soluzione. Queste immagini sono tue? Siamo liberi di usarli?
— James Webster

Queste immagini sono "modellate" su quelle utilizzate nelle app di Apple. In verità li ho estratti e ho apportato pochissime modifiche, se non nessuna. Utilizzare a proprio rischio. L'obiettivo era imitare l'aspetto e la sensazione nativi, quindi è difficile trovare qualcosa che abbia un aspetto molto diverso. Per quello che vale, ho spedito e approvato app che utilizzano questa immagine senza problemi.
— Ben Packard

I file di immagine png sembrano essere stati rimossi: non intendo aggiornarli costantemente con una nuova posizione dell'immagine, quindi mi scuso se il jpg non funziona per te. Posso ricaricare come e quando richiesto tramite commento.
— Ben Packard

3
Con l'immagine allegata funziona meglio: coderesizableImageWithCapInsets: UIEdgeInsetsMake (28, 14, 28, 14)
— RefuX

I collegamenti WikiUpload (per le due immagini) non riescono a trovare i file immagine ora. ;-(
— Mike Gledhill

18

Funziona alla grande, ma il colore dovrebbe essere un CGColor, non UIColor:

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

4
#import <QuartzCore / QuartzCore.h>
— kolinko

6

Credo che le risposte di cui sopra siano per le versioni precedenti di Swift. Ho cercato un po 'su Google e il codice seguente funziona per Swift 4. Condividilo solo per chiunque possa trarne vantaggio.

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

Buona programmazione!


Con Swift5 e la modalità oscura puoi persino utilizzare i colori di sistema:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
— moltitudini

4

per Swift Programming, usa questo

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

O semplicementeUIColor(white: 0.2, alpha: 1).CGColor
— Leone

3

questo è il più vicino possibile da un UITextField originale

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

è possibile aggiungere un bordo a UITextView da Storyboard - Identity Inspector - Attributo di runtime definito dall'utente

inserisci qui la descrizione dell'immagine


0

A partire da iOS 8 e Xcode 6, ora trovo che la soluzione migliore sia sottoclassare UITextView e contrassegnare la sottoclasse come IB_DESIGNABLE, che ti consentirà di visualizzare il bordo nello storyboard.

Intestazione:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

Implementazione:

#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

Quindi trascina semplicemente il tuo UITextView nello storyboard e imposta la sua classe su BorderTextView


0

La cosa che lo ha fatto funzionare (oltre a seguire le risposte qui) è l'aggiunta del file borderStyle dell'attributo:

#import <QuartzCore/QuartzCore.h>
..

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

0

Solo una piccola aggiunta. Se allarghi leggermente il bordo, interferirà con il lato sinistro e destro del testo. Per evitare ciò, ho aggiunto la seguente riga:

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

0

In Swift 3, puoi utilizzare le seguenti due righe:

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0

-3

Ho risolto questo problema nello storyboard mettendo un completamente disabilitato UIButtondietro UITextViewe rendendo il colore di sfondo del UITextViewclearColor. Funziona senza richiedere codice o pacchetti aggiuntivi.


3
Ovviamente, questo non funziona in iOS 7, poiché i pulsanti non hanno bordi (i pulsanti sembrano etichette ora)
— Mike Gledhill
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.