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.