UITextField-Rahmenfarbe

133

Ich habe wirklich den großen Wunsch, meine eigene Farbe auf den UITextField-Rand zu setzen. Bisher konnte ich jedoch herausfinden, wie nur der Grenzlinienstil geändert werden kann.

Ich habe die Hintergrundeigenschaft verwendet, um die Hintergrundfarbe folgendermaßen festzulegen:

self.textField.backgroundColor = textFieldColor;

Aber ich muss auch die Farbe des UITextField-Rahmens ändern. Und meine Frage war, wie man die Rahmenfarbe ändert.

dasha
quelle
Viele hilfreiche Antworten, aber nur eine ( stackoverflow.com/a/5387607/826946 ) erwähnte etwas, das ich gefunden habe: textField.borderStyle = UITextField.BorderStyle.none. Ohne das bekomme ich Spuren der eingebauten Grenze. Wenn Sie den integrierten Rahmen nicht verwenden und mit dem Definieren Ihres eigenen Rahmens beginnen, müssen Sie scheinbar sagen, dass Sie ihn nicht mit borderStyle = none verwenden möchten, und dann alle Parameter (Farbe, CornerRadius und BorderWidth) definieren
Andy Weinstein

Antworten:

274

Importieren Sie das QuartzCoreFramework in Ihrer Klasse:

#import <QuartzCore/QuartzCore.h>

und zum Ändern der Rahmenfarbe verwenden Sie das folgende Code-Snippet (ich setze es auf redColor),

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

Um zum ursprünglichen Layout zurückzukehren, setzen Sie einfach die Rahmenfarbe auf klare Farbe.

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

in schnellem Code

    textField.layer.borderWidth = 1
    textField.layer.borderColor = UIColor.whiteColor().CGColor
Gary
quelle
3
Es ist #import <QuartzCore / QuartzCore.h> anstelle von QuartCore (Sie haben das z vergessen)
cldrr
54
In iOS 7 müssen Sie eine Rahmenbreite festlegen, da sonst die Farbe nicht wirksam wird.
Micah
1
Als Anfänger macht das für mich keinen Sinn. Wenn ich eine leere App starte, gehe zum Storyboard und füge ein TextView-Feld hinzu. Wo importiere ich den Quarzkern? Wo füge ich die oben angegebenen Informationen zur Grenzbreite hinzu? Was ist "textField" und woher weiß es, über welches Textfeld ich spreche?
Nathan McKaskle
1
@Sephethus Wenn Sie es noch nicht herausgefunden haben, müssen Sie Folgendes tun: Sie müssen das im Storyboard erstellte Textfeld "anschließen" und diese Eigenschaften programmgesteuert ändern . Sobald Sie das Storyboard angeschlossen haben, gehen Sie in Ihren Code (z. B. in viewDidLoad) und ändern diese Eigenschaften, indem Sie self.myTextField.layer.cornerRadiususw. sagen . Diese Änderungen werden wirksam, sobald Sie Ihre App starten, aber Sie können die Änderungen im Storyboard nicht sehen. Wenn dies für Sie keinen Sinn ergibt, empfehlen wir Ihnen, eine Website zu besuchen, z. B. Ray Wenderlich, und einige Anfänger-Tuts zu lesen.
Aleksander
@ NathanMcKaskle "Wo importiere ich den Quarzkern?" Sie fügen es oben in Ihrer ViewController.h-Datei hinzu. "Was ist" textField "und woher weiß es, über welches Textfeld ich spreche?" Sie können ein 'lokales' Textfeld IBOutlet var erstellen und es mit dem TextField (nicht TextView) verbinden, das Sie gerade in das Storyboard eingefügt haben. Weitere Informationen finden Sie hier: hubpages.com/technology/… "Wo füge ich die obigen Informationen zur Grenzbreite hinzu?" Überall, aber vorzugsweise bei der viewDidLoad-Funktion.
Chen Li Yong
21

Versuche dies:

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

und importiere QuartzCore:

#import <QuartzCore/QuartzCore.h>
iOSPawan
quelle
17

Importieren Sie die folgende Klasse:

#import <QuartzCore/QuartzCore.h> 

// Code zum Festlegen der grauen Farbe für den Rand des Textfelds

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

Bei 171.0Bedarf durch die entsprechende Farbnummer ersetzen .

James Lobo
quelle
14

Diese Frage taucht in einer Google-Suche ziemlich häufig auf und hat größtenteils funktioniert! Ich fand, dass Salman Zaidis Antwort für iOS 7 teilweise richtig war.

Sie müssen den "Zurücksetzen" -Code ändern. Ich fand, dass das Folgende zum Zurücksetzen perfekt funktionierte:

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

Ich verstehe, dass dies höchstwahrscheinlich auf Änderungen in iOS 7 zurückzuführen ist.

Jovin_
quelle
10

Um diese Aktionen anhand der akzeptierten Antwort zu vereinfachen, können Sie auch eine Kategorie für erstellen UIView(da dies für alle Unterklassen von UIView funktioniert, nicht nur für Textfelder:

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

Verwendung:

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

Wenn Sie ein TextField mit abgerundeten Ecken verwenden, verwenden Sie diesen Code:

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

So entfernen Sie den Rand:

self.TextField.layer.masksToBounds=NO;
self.TextField.layer.borderColor=[[UIColor clearColor]CGColor];
Stefan Liesendahl
quelle
8

Update für Swift 5.0

textField.layer.masksToBounds = true
textField.layer.borderColor = UIColor.blue.cgColor
textField.layer.borderWidth = 1.0
Hugo Jordao
quelle
4

borderColor für jede Ansicht (oder UIView-Unterklasse) kann auch mithilfe eines Storyboards mit ein wenig Codierung festgelegt werden. Dieser Ansatz kann sehr praktisch sein, wenn Sie die Rahmenfarbe für mehrere UI-Objekte festlegen.

Nachfolgend finden Sie die Schritte, wie Sie dies erreichen können:

  1. Erstellen Sie eine Kategorie für die CALayer-Klasse. Deklarieren Sie eine Eigenschaft vom Typ UIColor mit einem geeigneten Namen. Ich werde sie als borderUIColor bezeichnen .
  2. Schreiben Sie den Setter und Getter für diese Eigenschaft.
  3. Setzen Sie bei der 'Setter'-Methode einfach die Eigenschaft "borderColor" der Ebene auf den neuen CGColor-Farbwert.
  4. Geben Sie in der 'Getter'-Methode UIColor mit borderColor der Ebene zurück.

PS: Denken Sie daran, dass in Kategorien keine Eigenschaften gespeichert werden können. 'borderUIColor' wird als berechnete Eigenschaft verwendet, nur als Referenz, um das zu erreichen, worauf wir uns konzentrieren.

Bitte schauen Sie sich das folgende Codebeispiel an.

Ziel c:

Schnittstellendatei:

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

@interface CALayer (BorderProperties)

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

@end

Implementierungsdatei:

#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!)
    }
}
}

Gehen Sie schließlich zu Ihrem Storyboard / XIB und befolgen Sie die verbleibenden Schritte.

  1. Klicken Sie auf das Ansichtsobjekt, für das Sie die Rahmenfarbe festlegen möchten.
  2. Klicken Sie im Bereich "Dienstprogramm" (rechte Seite des Bildschirms) auf "Identitätsinspektor" (3. von links).
  3. Klicken Sie unter "Benutzerdefinierte Laufzeitattribute" auf die Schaltfläche "+", um einen Schlüsselpfad hinzuzufügen.
  4. Stellen Sie den Typ des Schlüsselpfads auf "Farbe".
  5. Geben Sie den Wert für den Schlüsselpfad als "layer.borderUIColor" ein. [Denken Sie daran, dass dies der Variablenname sein sollte, den Sie in der Kategorie deklariert haben, nicht borderColor, hier ist borderUIColor ].
  6. Wählen Sie schließlich die gewünschte Farbe.

Sie müssen den Eigenschaftswert layer.borderWidth auf mindestens 1 setzen, um die Rahmenfarbe anzuzeigen .

Erstellen und ausführen. Viel Spaß beim Codieren. :) :)

Rameswar Prasad
quelle
Bitte posten Sie keine identischen Antworten auf mehrere Fragen. Schreiben Sie eine gute Antwort und stimmen Sie ab, um die anderen Fragen als Duplikate zu schließen. Wenn die Frage kein Duplikat ist, passen Sie Ihre Antworten auf die Frage an .
Josliber
1

Hier ist eine schnelle Implementierung. Sie können eine Erweiterung erstellen, damit sie von anderen Ansichten verwendet werden kann, wenn Sie möchten.

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
    }
}

Nennen Sie das wie : email.addBorderAndColor(color: UIColor.white, width: 0.5, corner_radius: 5, clipsToBounds: true).

meow2x
quelle