UITextField kenarlık rengi


133

UITextField sınırına kendi rengimi ayarlamak için gerçekten büyük bir dileğim var. Ama şimdiye kadar sadece sınır çizgisi stilini nasıl değiştirebileceğimi öğrenebildim.

Arka plan rengini bu şekilde ayarlamak için background özelliğini kullandım:

self.textField.backgroundColor = textFieldColor;

Ama ben de UITextField sınır rengini değiştirmek zorunda. Benim sorum sınır renginin nasıl değiştirileceği ile ilgiliydi.


Yararlı cevaplar bir sürü ama sadece bir ( stackoverflow.com/a/5387607/826946 ) anahtar bulduğum bir şey bahsetti: textField.borderStyle = UITextField.BorderStyle.none. Bu olmadan, yerleşik sınırın izlerini alırım. Görünüşe göre, yerleşik kenarlığı kullanmadığınızda ve kendi sınırınızı tanımlamaya başladığınızda, borderStyle = none kullanarak istemediğinizi ve ardından tüm parametreleri (renk, cornerRadius ve borderWidth) tanımladığınızı söylemelisiniz
Andy Weinstein

Yanıtlar:


274

QuartzCoreSınıfınızdaki içe aktarma çerçevesi:

#import <QuartzCore/QuartzCore.h>

ve kenarlık rengini değiştirmek için aşağıdaki kod snippet'ini kullanın (redColor olarak ayarlıyorum),

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

Orijinal düzene geri dönmek için kenarlık rengini açık renge ayarlayın,

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

hızlı kodda

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

3
QuartCore yerine #import <QuartzCore / QuartzCore.h> (z'yi unuttun)
cldrr

54
İOS 7'de bir kenarlık genişliği ayarlamanız gerekir, aksi takdirde renk etkili olmaz.
Micah

1
Yeni başlayanlar olarak bu benim için bir anlam ifade etmiyor. Boş, boş bir uygulama başlatırsam, film şeridine gidin ve bir TextView alanı ekleyin. Quartzcore'u nereden alabilirim? Yukarıdaki kenarlık genişliği bilgilerini nereye eklerim? "TextField" nedir ve hangi metin alanından bahsettiğimi nasıl bilebilir?
Nathan McKaskle

1
@Sefethus henüz anlamadıysanız, yapmanız gereken budur: film şeridinde oluşturduğunuz metin alanını "bağlamanız" ve bu özellikleri programlı olarak değiştirmeniz gerekir . Film şeridini bağladıktan sonra, kodunuza girer (örneğin, içinde viewDidLoad) ve bu özellikleri self.myTextField.layer.cornerRadiusvb. Bu sizin için bir anlam ifade etmiyorsa, bir web sitesine, örneğin Ray Wenderlich'e gitmenizi ve bazı acemi tutsları okumanızı öneririm.
Aleksander

@NathanMcKaskle " Quartzcore'u nereden alabilirim?" ViewController.h dosyanızın üstüne ekleyin. "" TextField "nedir ve hangi metin alanından bahsettiğimi nasıl bilebilir?" Bir 'yerel' metin alanı IBOutlet var oluşturabilir ve bunu Storyboard'a koyduğunuz TextField'a (TextView değil) bağlayabilirsiniz. Daha fazla bilgi için buraya bakın: hubpages.com/technology/… "Yukarıdaki sınır genişliği bilgilerini nereye eklerim?" Her yerde, ama tercihen viewDidLoad işlevinde.
Chen Li Yong,

21

Bunu dene:

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

ve ithalat QuartzCore:

#import <QuartzCore/QuartzCore.h>

17

Aşağıdaki sınıfı içe aktarın:

#import <QuartzCore/QuartzCore.h> 

// Metin alanının kenarlığı için gri renk ayarlama kodu

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

171.0Gerektiği gibi ilgili renk numarasıyla değiştirin .


14

bu soru bir Google aramasında oldukça yüksektir ve çoğunlukla işe yaramıştır! Salman Zaidi'nin cevabının iOS 7 için kısmen doğru olduğunu buldum.

"Geri alma" kodunda bir değişiklik yapmanız gerekir. Geri dönmek için aşağıdakilerin mükemmel çalıştığını gördüm:

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

Bunun büyük olasılıkla iOS 7'deki değişikliklerden kaynaklandığını anlıyorum.


10

Bu eylemleri kabul edilen yanıttan basitleştirmek için, aşağıdakiler için de Kategori oluşturabilirsiniz UIView(çünkü bu, yalnızca metin alanları için değil, tüm UIView alt sınıfları için geçerlidir:

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

Kullanımı:

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

9

Köşeleri yuvarlatılmış bir TextField kullanıyorsanız bu kodu kullanın:

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

Kenarlığı kaldırmak için:

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

8

Swift 5.0 Güncellemesi

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

4

sınır rengiHerhangi bir görünümdeki (veya UIView Alt Sınıfı) , biraz kodlama içeren storyboard kullanılarak da ayarlanabilir ve birden fazla UI Nesnesinde sınır rengini ayarlarsanız bu yaklaşım gerçekten kullanışlı olabilir.

Aşağıda bunu nasıl başaracağınız,

  1. CALayer sınıfında bir kategori oluşturun. UIColor türünde uygun bir ada sahip bir özellik bildirin , bunu borderUIColor olarak adlandıracağım .
  2. Bu mülk için ayarlayıcıyı ve alıcıyı yazın.
  3. 'Setter' yönteminde katmanın "borderColor" özelliğini yeni renkler CGColor değerine ayarlayın.
  4. 'Getter' yönteminde UIColor'u katmanın borderColor değeri ile döndürün.

PS: Unutmayın, Kategoriler depolanmış özelliklere sahip olamaz. 'borderUIColor', odaklandığımız şeye ulaşmak için bir referans olarak hesaplanmış bir özellik olarak kullanılır.

Lütfen aşağıdaki kod örneğine bir göz atın;

Hedef C:

Arayüz Dosyası:

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

@interface CALayer (BorderProperties)

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

@end

Uygulama Dosyası:

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

Ve son olarak film şeridinize / XIB'ye gidin, kalan adımları izleyin;

  1. Kenarlık rengini ayarlamak istediğiniz Görünüm nesnesini tıklatın.
  2. "Yardımcı Program" (Ekranın sağ tarafı) panelinde "Kimlik Denetçisi" (Soldan 3.) seçeneğine tıklayın.
  3. "Kullanıcı Tanımlı Çalışma Zamanı Öznitelikleri" altında, bir anahtar yolu eklemek için "+" düğmesini tıklayın.
  4. Anahtar yolunun türünü "Renk" olarak ayarlayın.
  5. Anahtar yolunun değerini "layer.borderUIColor" olarak girin. [Bunun , borderColor değil, borderUIColor olduğu , kategoride bildirdiğiniz değişken adı olması gerektiğini unutmayın ].
  6. Sonunda istediğiniz rengi seçin.

Kenarlık rengini görmek için layer.borderWidth özellik değerini en az 1 olarak ayarlamanız gerekir .

Oluşturun ve çalıştırın. Mutlu Kodlama. :)


Lütfen birden fazla soruya özdeş cevaplar göndermeyin. İyi bir yanıt gönderin, ardından diğer soruları kopya olarak kapatmak için oy verin / işaretleyin. Soru yinelenmiyorsa, yanıtınızı soruya uygun hale getirin .
josliber

1

İşte bir Swift uygulaması. İsterseniz, diğer görünümler tarafından kullanılabilmesi için bir uzantı oluşturabilirsiniz.

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

Gibi bu çağrı: email.addBorderAndColor(color: UIColor.white, width: 0.5, corner_radius: 5, clipsToBounds: true).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.