Colore bordo UITextField


133

Ho davvero un grande desiderio di impostare il mio colore sul bordo UITextField. Ma finora ho potuto scoprire come modificare solo lo stile della linea di confine.

Ho usato la proprietà background per impostare il colore di sfondo in questo modo:

self.textField.backgroundColor = textFieldColor;

Ma devo cambiare anche il colore del bordo di UITextField. E la mia domanda era su come cambiare il colore del bordo.


Molte risposte utili, ma solo una ( stackoverflow.com/a/5387607/826946 ) ha menzionato qualcosa che ho trovato chiave: textField.borderStyle = UITextField.BorderStyle.none. Senza di ciò ottengo tracce del bordo incorporato. Apparentemente una volta che non usi il bordo integrato e inizi a definire il tuo, devi dire che non lo vuoi usando borderStyle = none e quindi definire tutti i parametri (color, cornerRadius e borderWidth)
Andy Weinstein

Risposte:


274

Importa QuartzCorequadro nella tua classe:

#import <QuartzCore/QuartzCore.h>

e per cambiare il colore del bordo usa il seguente frammento di codice (lo sto impostando su redColor),

    textField.layer.cornerRadius=8.0f;
    textField.layer.masksToBounds=YES;
    textField.layer.borderColor=[[UIColor redColor]CGColor];
    textField.layer.borderWidth= 1.0f;

Per tornare al layout originale, basta impostare il colore del bordo su colore chiaro,

    serverField.layer.borderColor=[[UIColor clearColor]CGColor];

nel codice rapido

    textField.layer.borderWidth = 1
    textField.layer.borderColor = UIColor.whiteColor().CGColor

3
È #import <QuartzCore / QuartzCore.h> invece di QuartCore (hai dimenticato la z)
cldrr

54
In iOS 7 devi impostare una larghezza del bordo altrimenti il ​​colore non avrà effetto.
Michea il

1
Come un principiante questo non ha senso per me. Se avvio un'app vuota e vuota, andare allo storyboard e aggiungere un campo TextView. Dove posso importare il quartzcore? Dove posso aggiungere le informazioni sulla larghezza del bordo sopra? Che cos'è "textField" e come fa a sapere di quale campo di testo sto parlando?
Nathan McKaskle,

1
@Sephethus se non l'hai ancora capito, questo è quello che devi fare: devi "collegare" il campo di testo che hai creato nello storyboard e modificare queste proprietà a livello di codice . Dopo aver collegato lo storyboard, si entra nel codice (ad esempio in viewDidLoad) e si modificano queste proprietà dicendo self.myTextField.layer.cornerRadiusecc. Queste modifiche avranno effetto non appena si avvia l'app, ma non è possibile vedere le modifiche nello Storyboard. Se questo non ha alcun senso per te, ti suggerisco di visitare un sito Web, ad esempio Ray Wenderlich, e leggere alcuni tutorial per principianti.
Aleksander,

@NathanMcKaskle "Dove posso importare il quartzcore?" Lo aggiungi nella parte superiore del file ViewController.h. "Che cos'è" textField "e come fa a sapere di quale campo di testo sto parlando?" Puoi creare un campo di testo IBOutlet var 'locale' e collegarlo al TextField (non TextView) che hai appena inserito nello Storyboard. Per maggiori informazioni, controlla qui: hubpages.com/technology/… "Dove posso aggiungere le informazioni sulla larghezza del bordo sopra?" Ovunque, ma preferibilmente, nella funzione viewDidLoad.
Chen Li Yong,

21

Prova questo:

UITextField *theTextFiels=[[UITextField alloc]initWithFrame:CGRectMake(40, 40, 150, 30)];
    theTextFiels.borderStyle=UITextBorderStyleNone;
    theTextFiels.layer.cornerRadius=8.0f;
    theTextFiels.layer.masksToBounds=YES;
        theTextFiels.backgroundColor=[UIColor redColor];
    theTextFiels.layer.borderColor=[[UIColor blackColor]CGColor];
    theTextFiels.layer.borderWidth= 1.0f;

    [self.view addSubview:theTextFiels];
    [theTextFiels release];

e importare QuartzCore:

#import <QuartzCore/QuartzCore.h>

17

Importa la seguente classe:

#import <QuartzCore/QuartzCore.h> 

// Codice per l'impostazione del colore grigio per il bordo del campo di testo

[[textField layer] setBorderColor:[[UIColor colorWithRed:171.0/255.0
                                                   green:171.0/255.0
                                                    blue:171.0/255.0
                                                   alpha:1.0] CGColor]];

Sostituire 171.0con il rispettivo numero di colore come richiesto.


14

questa domanda si presenta piuttosto in alto su una ricerca su Google e ha funzionato per la maggior parte! Ho scoperto che la risposta di Salman Zaidi era parzialmente corretta per iOS 7.

È necessario apportare una modifica al codice di "ripristino". Ho scoperto che quanto segue per il ripristino ha funzionato perfettamente:

textField.layer.cornerRadius = 0.0f;
textField.layer.masksToBounds = YES;
textField.layer.borderColor = [[UIColor blackColor] CGColor];
textField.layer.borderWidth = 0.0f;

Capisco che questo è molto probabilmente dovuto alle modifiche in iOS 7.


10

Per semplificare queste azioni dalla risposta accettata, puoi anche creare Categoria per UIView(poiché funziona per tutte le sottoclassi di UIView, non solo per i campi di testo:

UIView + Additions.h:

#import <Foundation/Foundation.h>

@interface UIView (Additions)
- (void)setBorderForColor:(UIColor *)color 
                    width:(float)width 
                   radius:(float)radius;
@end

UIView + Additions.m:

#import "UIView+Additions.h"

@implementation UIView (Additions)

- (void)setBorderForColor:(UIColor *)color 
                    width:(float)width
                   radius:(float)radius
{
    self.layer.cornerRadius = radius;
    self.layer.masksToBounds = YES;
    self.layer.borderColor = [color CGColor];
    self.layer.borderWidth = width;
}

@end

Uso:

#import "UIView+Additions.h"
//...
[textField setBorderForColor:[UIColor redColor]
                       width:1.0f
                      radius:8.0f];

9

Se si utilizza un campo di testo con angoli arrotondati, utilizzare questo codice:

    self.TextField.layer.cornerRadius=8.0f;
    self.TextField.layer.masksToBounds=YES;
    self.TextField.layer.borderColor=[[UIColor redColor]CGColor];
    self.TextField.layer.borderWidth= 1.0f;

Per rimuovere il bordo:

self.TextField.layer.masksToBounds=NO;
self.TextField.layer.borderColor=[[UIColor clearColor]CGColor];

8

Aggiornamento per swift 5.0

textField.layer.masksToBounds = true
textField.layer.borderColor = UIColor.blue.cgColor
textField.layer.borderWidth = 1.0

4

borderColor su qualsiasi vista (o sottoclasse UIView) potrebbe anche essere impostato utilizzando lo storyboard con un po 'di codice e questo approccio potrebbe essere davvero utile se si imposta il colore del bordo su più oggetti dell'interfaccia utente.

Di seguito sono riportati i passaggi su come raggiungerlo,

  1. Creare una categoria sulla classe CALayer. Dichiara una proprietà di tipo UIColor con un nome adatto, la chiamerò borderUIColor .
  2. Scrivi il setter e il getter per questa proprietà.
  3. Nel metodo 'Setter' basta impostare la proprietà "borderColor" del layer sul nuovo valore CGColor dei colori.
  4. Nel metodo 'Getter' restituisce UIColor con borderColor del layer.

PS: ricorda, le categorie non possono avere proprietà memorizzate. 'borderUIColor' viene usato come proprietà calcolata, proprio come riferimento per ottenere ciò su cui ci stiamo concentrando.

Dai un'occhiata al seguente esempio di codice;

Obiettivo C:

File di interfaccia:

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer (BorderProperties)

// This assigns a CGColor to borderColor.
@property (nonatomic, assign) UIColor* borderUIColor;

@end

File di implementazione:

#import "CALayer+BorderProperties.h"

@implementation CALayer (BorderProperties)

- (void)setBorderUIColor:(UIColor *)color {
    self.borderColor = color.CGColor;
}

- (UIColor *)borderUIColor {
    return [UIColor colorWithCGColor:self.borderColor];
}

@end

Swift 2.0:

extension CALayer {
var borderUIColor: UIColor {
    set {
        self.borderColor = newValue.CGColor
    }

    get {
        return UIColor(CGColor: self.borderColor!)
    }
}
}

E infine vai allo storyboard / XIB, segui i passaggi rimanenti;

  1. Fare clic sull'oggetto Visualizza per il quale si desidera impostare Colore bordo.
  2. Fai clic su "Identity Inspector" (3 ° da sinistra) nel pannello "Utilità" (lato destro dello schermo).
  3. In "Attributi di runtime definiti dall'utente", fai clic sul pulsante "+" per aggiungere un percorso chiave.
  4. Impostare il tipo di percorso chiave su "Colore".
  5. Immettere il valore per il percorso chiave come "layer.borderUIColor". [Ricorda che questo dovrebbe essere il nome della variabile che hai dichiarato nella categoria, non borderColor qui è borderUIColor ].
  6. Finalmente ho scelto il colore che desideri.

Devi impostare il valore della proprietà layer.borderWidth su almeno 1 per vedere il colore del bordo.

Costruisci ed esegui. Happy Coding. :)


Si prega di non pubblicare risposte identiche a più domande. Posta una buona risposta, quindi vota / contrassegna per chiudere le altre domande come duplicati. Se la domanda non è un duplicato, personalizza le tue risposte alla domanda .
josliber

1

Ecco un'implementazione rapida. Puoi creare un'estensione in modo che sia utilizzabile da altre visualizzazioni, se lo desideri.

extension UIView {
    func addBorderAndColor(color: UIColor, width: CGFloat, corner_radius: CGFloat = 0, clipsToBounds: Bool = false) {
        self.layer.borderWidth  = width
        self.layer.borderColor  = color.cgColor
        self.layer.cornerRadius = corner_radius
        self.clipsToBounds      = clipsToBounds
    }
}

Chiama questo come: email.addBorderAndColor(color: UIColor.white, width: 0.5, corner_radius: 5, clipsToBounds: true).

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.