Kolor obramowania UITextField

133

Mam naprawdę wielkie życzenie, aby ustawić własny kolor obramowania UITextField. Ale do tej pory mogłem tylko dowiedzieć się, jak zmienić styl linii granicznej.

Użyłem właściwości background do ustawienia koloru tła w następujący sposób:

self.textField.backgroundColor = textFieldColor;

Ale muszę też zmienić kolor obramowania UITextField. Moje pytanie dotyczyło zmiany koloru obramowania.

dasza
źródło
Wiele pomocnych odpowiedzi, ale tylko jedna ( stackoverflow.com/a/5387607/826946 ) wspomniała o czymś, co znalazłem klucz: textField.borderStyle = UITextField.BorderStyle.none. Bez tego mam ślady wbudowanej ramki. Wygląda na to, że gdy nie używasz wbudowanej ramki i nie zaczynasz definiować własnej, musisz powiedzieć, że nie chcesz jej, używając borderStyle = none, a następnie zdefiniować wszystkie parametry (color, cornerRadius i borderWidth)
Andy Weinstein

Odpowiedzi:

274

Importuj QuartzCoreframework w swojej klasie:

#import <QuartzCore/QuartzCore.h>

a do zmiany koloru obramowania użyj poniższego fragmentu kodu (ustawiam go na redColor),

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

Aby powrócić do pierwotnego układu, po prostu ustaw kolor obramowania na czysty kolor,

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

w szybkim kodzie

    textField.layer.borderWidth = 1
    textField.layer.borderColor = UIColor.whiteColor().CGColor
Gary
źródło
3
To #import <QuartzCore / QuartzCore.h> zamiast QuartCore (zapomniałeś z)
cldrr
54
W iOS 7 musisz ustawić szerokość obramowania, inaczej kolor nie zadziała.
Micah
1
Jako początkującego nie ma to dla mnie sensu. Jeśli uruchomię pustą, pustą aplikację, przejdź do serii ujęć i dodaj pole TextView. Gdzie mogę zaimportować rdzeń kwarcowy? Gdzie mogę dodać powyższe informacje o granicy? Co to jest „textField” i skąd wie, o którym polu tekstowym mówię?
Nathan McKaskle
1
@Sephethus, jeśli jeszcze tego nie rozgryzłeś, oto co musisz zrobić: musisz „podłączyć” pole tekstowe, które utworzyłeś w scenorysie i zmienić programowo te właściwości . Po podłączeniu scenorysu przechodzisz do swojego kodu (na przykład w viewDidLoad) i zmieniasz te właściwości, mówiąc self.myTextField.layer.cornerRadiusitp. Te zmiany zaczną obowiązywać natychmiast po uruchomieniu aplikacji, ale nie możesz zobaczyć zmian w serii ujęć. Jeśli nie ma to dla Ciebie żadnego sensu, proponuję odwiedzić stronę internetową, na przykład Ray Wenderlich, i przeczytać kilka porad dla początkujących.
Aleksander
@NathanMcKaskle "Gdzie mogę zaimportować rdzeń kwarcowy?" Dodajesz go na górze pliku ViewController.h. „Co to jest„ textField ”i skąd wie, o którym polu tekstowym mówię?” Możesz utworzyć `` lokalny '' zmienny IBOutlet typu textfield i połączyć go z TextField (nie TextView), który właśnie umieściłeś w Storyboard. Aby uzyskać więcej informacji, sprawdź tutaj: hubpages.com/technology/ ... "Gdzie mogę dodać powyższe informacje o borderwidth?" Wszędzie, ale najlepiej w funkcji viewDidLoad.
Chen Li Yong
21

Spróbuj tego:

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

i importuj QuartzCore:

#import <QuartzCore/QuartzCore.h>
iOSPawan
źródło
17

Zaimportuj następującą klasę:

#import <QuartzCore/QuartzCore.h> 

// Kod do ustawiania szarego koloru obramowania pola tekstowego

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

W razie 171.0potrzeby zastąp odpowiednim numerem koloru.

James Lobo
źródło
14

to pytanie pojawia się dość wysoko w wyszukiwarce Google i przez większość czasu działało! Zauważyłem, że odpowiedź Salmana Zaidiego była częściowo poprawna w przypadku iOS 7.

Musisz zmodyfikować kod „przywracający”. Okazało się, że następujące funkcje przywracania działały idealnie:

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

Rozumiem, że jest to najprawdopodobniej spowodowane zmianami w iOS 7.

Jovin_
źródło
10

Aby uprościć tę akcję z zaakceptowanej odpowiedzi, możesz również utworzyć kategorię dla UIView(ponieważ działa to dla wszystkich podklas UIView, nie tylko dla pól tekstowych:

UIView + Additions.h:

#import <Foundation/Foundation.h>

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

UIView + Dodatki. 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

Stosowanie:

#import "UIView+Additions.h"
//...
[textField setBorderForColor:[UIColor redColor]
                       width:1.0f
                      radius:8.0f];
skywinder
źródło
9

Jeśli używasz TextField z zaokrąglonymi narożnikami, użyj tego kodu:

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

Aby usunąć obramowanie:

self.TextField.layer.masksToBounds=NO;
self.TextField.layer.borderColor=[[UIColor clearColor]CGColor];
Stefan Liesendahl
źródło
8

Aktualizacja dla Swift 5.0

textField.layer.masksToBounds = true
textField.layer.borderColor = UIColor.blue.cgColor
textField.layer.borderWidth = 1.0
Hugo Jordao
źródło
4

kolor ramki w dowolnym widoku (lub podklasie UIView) można również ustawić za pomocą scenorysu z odrobiną kodowania, a to podejście może być naprawdę przydatne, jeśli ustawiasz kolor obramowania na wielu obiektach interfejsu użytkownika.

Poniżej kroki jak to osiągnąć,

  1. Utwórz kategorię w klasie CALayer. Zadeklaruj właściwość typu UIColor z odpowiednią nazwą, nadam jej nazwę borderUIColor .
  2. Napisz setter i getter dla tej właściwości.
  3. W metodzie „Setter” wystarczy ustawić właściwość „borderColor” warstwy na nową wartość CGColor kolorów.
  4. W metodzie 'Getter' zwraca UIColor z wartością borderColor warstwy.

PS: Pamiętaj, kategorie nie mogą mieć przechowywanych właściwości. „borderUIColor” jest używana jako właściwość obliczeniowa, podobnie jak odniesienie do osiągnięcia tego, na czym się skupiamy.

Proszę spojrzeć na poniższy przykładowy kod;

Cel C:

Plik interfejsu:

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

@interface CALayer (BorderProperties)

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

@end

Plik wdrożeniowy:

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

I na koniec przejdź do swojego storyboardu / XIB, wykonaj pozostałe kroki;

  1. Kliknij obiekt Widok, dla którego chcesz ustawić kolor obramowania.
  2. Kliknij „Identity Inspector” (trzeci od lewej) w panelu „Utility” (prawa strona ekranu).
  3. W sekcji „Atrybuty środowiska wykonawczego zdefiniowane przez użytkownika” kliknij przycisk „+”, aby dodać ścieżkę klucza.
  4. Ustaw typ ścieżki klucza na „Kolor”.
  5. Wprowadź wartość ścieżki klucza w postaci „layer.borderUIColor”. [Pamiętaj, że powinna to być nazwa zmiennej, którą zadeklarowałeś w kategorii, a nie borderColor, tutaj jest to borderUIColor ].
  6. Wreszcie wybierz dowolny kolor.

Musisz ustawić wartość właściwości layer.borderWidth na co najmniej 1, aby zobaczyć kolor obramowania.

Buduj i uruchamiaj. Miłego kodowania. :)

Rameswar Prasad
źródło
Nie publikuj identycznych odpowiedzi na wiele pytań. Opublikuj jedną dobrą odpowiedź, a następnie zagłosuj / oflaguj, aby zamknąć pozostałe pytania jako duplikaty. Jeśli pytanie nie jest powtórzeniem, dostosuj swoje odpowiedzi do pytania .
josliber
1

Oto implementacja Swift. Możesz utworzyć rozszerzenie, aby było używane przez inne widoki, jeśli chcesz.

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

Nazywamy to tak: email.addBorderAndColor(color: UIColor.white, width: 0.5, corner_radius: 5, clipsToBounds: true).

meow2x
źródło